如何在POST / PATCH / DELETE中使用RestDocumentJsonService?

时间:2015-05-18 16:47:42

标签: java xpages xpages-extlib

我正在使用此代码通过使用内置的Domino DAS服务提供商ExtLib,从特定视图或单个文档创建自己的REST服务来获取文档。

package no.kjeilen.das.services;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ibm.domino.services.ServiceEngine;
import com.ibm.domino.services.rest.das.document.RestDocumentJsonService;
import com.ibm.domino.services.rest.das.document.impl.DefaultDocumentParameters;
import com.ibm.domino.services.rest.das.view.RestViewJsonService;
import com.ibm.domino.services.rest.das.view.impl.DefaultViewParameters;

public class ArticlesViewService implements         com.ibm.xsp.extlib.services.servlet.ServiceFactory{

    public ServiceEngine createEngine(HttpServletRequest httpRequest,
            HttpServletResponse httpResponse) throws ServletException {

        String pathinfo = httpRequest.getPathInfo();
        String action = pathinfo.substring(pathinfo.lastIndexOf("/")+1);

        if(action.equals("all")){
            DefaultViewParameters p = new DefaultViewParameters();
            p.setViewName("articlesAll");
            p.setGlobalValues(DefaultViewParameters.GLOBAL_ALL);
            p.setSystemColumns(DefaultViewParameters.SYSCOL_ALL);
            p.setDefaultColumns(true);
            p.setStart(0);
            p.setCount(Integer.MAX_VALUE);
            return new RestViewJsonService(httpRequest, httpResponse, p);

        }else{
            DefaultDocumentParameters p = new DefaultDocumentParameters();
            p.setSystemItems(DefaultDocumentParameters.SYS_ITEM_ALL);
            p.setGlobalValues(DefaultDocumentParameters.GLOBAL_ALL);
            p.setDefaultItems(true);
            p.setDocumentUnid(action);

            return new RestDocumentJsonService(httpRequest,httpResponse,p);

        }       
    }
}

然后我有这个类来处理servlet路由:

package no.kjeilen.das.services;

import com.ibm.xsp.extlib.services.servlet.DefaultServiceFactory;
import com.ibm.xsp.extlib.services.servlet.DefaultServletFactory;
import com.ibm.xsp.extlib.services.servlet.ServiceFactory;

public class DASServletFactory extends DefaultServletFactory {

    private static ServiceFactory createFactory() {
        DefaultServiceFactory factory = new DefaultServiceFactory();
        factory.addFactory("artikler", new ArticlesViewService() );

        return factory;
    }

    public DASServletFactory() {

        super("services", "Extension Library Services Servlet",     createFactory());

    }
}

这允许我调用:http:// {server} / {db} / xsp / services / artikler / all来通过DAS获取视图中的所有条目,或者我可以调用:http:// {server} / {db} / xsp / services / artikler / {docUNID}通过DAS获取特定文档。

但是,我如何使用/扩展此方法还包括对POST / PATCH / DELETE的支持?

我似乎无法找到任何相关的例子......

非常感谢任何信息/提示/代码!

亲切的问候, Petter Kjeilen

1 个答案:

答案 0 :(得分:0)

如果您使用的是自定义REST服务,则可以将调用放入doPOST,doPUT,doDELETE。我认为你需要在PATCH上使用doPUT。

您可以通过此方法http://www.bleedyellow.com/blogs/DominoHerald/entry/get_the_unid_for_custom_rest_service_toget_method?lang=en_us

获取所需文档的UNID

这是一个示例,在SSJS中授予它而不是像您正在使用的Java那样,但是我在事件中编码时,您应该能够输入您的方法。

这有帮助吗?

干杯, 布赖恩