Java 我的xpage应用程序的基本REST服务
我想为我的XPage应用程序设置一些基本的REST服务。因此,我在xpage上添加了xe:restService控件,并选择了xe:customRestService,其中我引用了一个Java类:Java 我的xpage应用程序的基本REST服务,java,rest,xpages,Java,Rest,Xpages,我想为我的XPage应用程序设置一些基本的REST服务。因此,我在xpage上添加了xe:restService控件,并选择了xe:customRestService,其中我引用了一个Java类: <xe:restService id="restService1" pathInfo="json" state="false"> <xe:this.service> <xe:customRestService contentType
<xe:restService id="restService1" pathInfo="json" state="false">
<xe:this.service>
<xe:customRestService contentType="application/json"
serviceBean="se.banking.desk.CustomSearchHelper">
</xe:customRestService>
</xe:this.service>
</xe:restService>
我的问题是:这是编写自定义REST服务的好方法吗?还有其他选择吗?我在哪里可以找到更多从入门级开始的示例/信息?你问了一个相当复杂的问题,这一问题在过去几年一直萦绕在我的脑海中。我的评估是,找到“好方法”取决于开发者和应用程序中使用的约定。我已经包括了一些链接,这些链接指向我看到的可用替代方案的来源,其中一些是我的,它们试图从头开始解决一些概念,比如我的 [更新]我编辑了这个答案,加入了一些代码示例,因为总是有链接最终不起作用的可能性;应保留答案的意图。[/更新] 您的实现是一个很好的例子,说明了xe:restService控件如何轻松地绑定到XPage,在XPages运行时和Domino服务器中可以使用各种各样的选项 据我所知,在XPages上下文中,实现RESTful API/端点的方法大约有5种。按照易于实施的一般顺序(取决于人员):
哈根特。这将不会呈现为页面,而是呈现为应用程序/json数据。
您已经走上了一条很好的道路。很好的概述,但我错过了两个选项:(1)Domino访问服务(由于缺乏定制,不推荐使用)和(2)xe:restService控件的内置服务。例如,如果您只需要视图的内容,那么xe:viewJsonService非常有用。它支持分页,并且可以轻松定制;我对此进行了详细阐述。我不再向任何人推荐DAS,因为他们不知道在没有反向代理或其他保护措施的情况下,完全接触积垢的危险。塞尔达尔·巴塞格麦斯(Serdar Basegmez)也将在ICON UK举办一场会议。我还写了一篇关于使用OSGi插件的博客文章。这是我喜欢的方法。我建议使用com.ibm.domino.das.service.RestService来实现它也提供的功能。JsonJavaObject还可以轻松地转换为JSON或从JSON转换为JSON。JsonParser类还允许操作。注意,JsonJavaObject.toJavaDate()存在一些问题,我将在本周晚些时候或下周初在博客中讨论这些问题。Jackson是Domino之外的标准配置,但我在初始化NullPointerException时很难解决它,这可能是一个深埋在构造函数中的Java安全问题,不确定你是否从答案中得到了你所需要的?
package se.banking.desk;
import java.io.IOException;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ibm.domino.services.ServiceException;
import com.ibm.domino.services.rest.RestServiceEngine;
import com.ibm.xsp.extlib.component.rest.CustomService;
import com.ibm.xsp.extlib.component.rest.CustomServiceBean;
public class CustomSearchHelper extends CustomServiceBean {
@Override
public void renderService(CustomService service, RestServiceEngine engine) throws ServiceException {
HttpServletRequest request = engine.getHttpRequest();
String method = request.getMethod();
HttpServletResponse response = engine.getHttpResponse();
response.setHeader("Content-Type", "text/javascript; charset=UTF-8");
if(method.equals("GET")){
this.get(engine);
}
else if(method.equals("POST")){
this.post(engine,request);
}
else{
this.other(engine);
}
}
public void get(RestServiceEngine engine){
HttpServletResponse response = engine.getHttpResponse();
try {
response.getWriter().write("get()");
response.getWriter().close();
return;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void post(RestServiceEngine engine,HttpServletRequest request){
HttpServletResponse response = engine.getHttpResponse();
Map parameters = request.getParameterMap();
try {
response.getWriter().write("post()");
response.getWriter().write( request.getParameter("form"));
String[] form = (String[])parameters.get("form");
String val = form[0];
response.getWriter().write(val);
response.getWriter().close();
} catch (Exception e) {
// TODO: handle exception
}
}
public void other(RestServiceEngine engine){
HttpServletResponse response = engine.getHttpResponse();
try {
response.getWriter().write("other()");
response.getWriter().close();
return;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}