Установить код ответа в режиме отдыха

Я не могу понять, как установить код ответа в моем элементе управления REST.

введите здесь описание изображения

Вот код управления REST.

    <xe:restService id="restProfile" pathInfo="profile">
    <xe:this.service>
        <xe:customRestService
            doGet="#{javascript:REST_PROFILE.doGet()}"
            contentType="application/json"
            doPost="#{javascript:REST_PROFILE.doPost(reqVar)}"
            requestContentType="application/json" requestVar="reqVar">
        </xe:customRestService>
    </xe:this.service>
</xe:restService>

В некоторых случаях требуется вернуть код 404, и я не могу понять, как это сделать.

Кто-нибудь знает, как это сделать с помощью SSJS?

Версия Домино 9.0.1.


person Dmytro Pastovenskyi    schedule 30.07.2016    source источник


Ответы (1)


Вы не можете вернуть статус 404 с помощью doGet и doPost. Статус свойства ответа управляется customRestService. Код SSJS может возвращать только данные JSON.
Вы можете определить собственное содержимое JSON, например

{
    "status": "error",
    "error-message": "something not found"
} 

хотя и обрабатывать ошибки таким образом.

В качестве альтернативы вы можете использовать serviceBean customRestService.

        <xe:customRestService
            contentType="application/json"
            requestContentType="application/json"
            serviceBean="de.leonso.demo.RestService">
        </xe:customRestService>

и установите код возврата с response.setStatus(status) там:

public class RestService extends CustomServiceBean {
    @Override
    public void renderService(CustomService service, RestServiceEngine engine) throws ServiceException {
        try {
            HttpServletRequest request = engine.getHttpRequest();
            HttpServletResponse response = engine.getHttpResponse();
            response.setHeader("Content-Type", "application/json; charset=UTF-8");
            response.setContentType("application/json");
            response.setHeader("Cache-Control", "no-cache");
            response.setCharacterEncoding("utf-8");

            String method = request.getMethod();
            int status = 200;
            if (method.equals("GET")) {
                status = ...
            } else {
                ...
            }
            response.setStatus(status);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
person Knut Herrmann    schedule 31.07.2016
comment
Спасибо @Кнут. Я приму это как ответ, так как это «один в один», что я и подозревал. - person Dmytro Pastovenskyi; 31.07.2016