Java 我的xpage应用程序的基本REST服务

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

我想为我的XPage应用程序设置一些基本的REST服务。因此,我在xpage上添加了xe:restService控件,并选择了xe:customRestService,其中我引用了一个Java类:

<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种。按照易于实施的一般顺序(取决于人员):

  • (这一点可以与下一个进行交换;使用SSJS或Java可以轻松开始,提供大量示例,并且对那些没有Java经验的人来说不那么可怕)
  • 
    哈根特。这将不会呈现为页面,而是呈现为应用程序/json数据。
    
  • 关于xe:restService最好的部分是对于诸如xe:viewJsonService(Domino开发人员已经在视图和文档方面进行了思考,这在某种程度上类似于restfulapi的集合和记录机制)之类的东西的开箱即用的选项,正如Mark在评论中指出的那样;这些很容易进入,也很方便(很多人都在博客上写过)

  • xe:restService,或者像上面所示的CustomServiceBean,正如Eric指出的那样,在XPages中实现REST服务有不同的方法。以下是我在IBM Connect 2016上关于REST服务的演示的链接

    除了OSGi插件之外,本演示涵盖了所有不同的方式,因为这种技术对于一个小时的会话来说有点繁重

    在示例数据库中,使用了所有其他方法。只需下载示例并在Notes客户端中打开它。这里有一个欢迎页面,引导您了解代码和示例


    您已经走上了一条很好的道路。

    很好的概述,但我错过了两个选项:(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();
            }
        }
    
    }