繁体   English   中英

如何设置HTTP响应的服务器状态代码?

[英]how to set the server status code for http response?

我有这个角度的客户端代码:

        $http.put('api/Voices/updateVoice', {voice : voice, isAddMode : isAddMode}).then(
            function successCallback(response) {
                lastUpdateStatus = response.data;
                deferred.resolve(response.data);
            }, function errorCallback(response) {
                var responseStr = JSON.stringify(response)
                console.log("server error: "+responseStr);
                deferred.reject(response.data);
            });
        return deferred.promise;

这个Java服务器代码:返回一个jax-rs响应对象。

    @Path("/foo")
    @PUT
    @Consumes(MediaType.APPLICATION_JSON + ";charset=utf-8")
    public Response updateVoice(VoiceUpdateRequest voiceUpdateRequest) throws Exception {

        try {
            voicesInDb = rulesUiRepository.getUiVoices();

            logger.info("ACTION-LOG: " + (voiceUpdateRequest.isAddMode ? "Add" : "Edit") + " voice: " + voiceUpdateRequest.voice);
            logger.info("ACTION-LOG: DB state: " + voicesInDb);

            boolean isAddMode = voiceUpdateRequest.isAddMode;
            VoiceUi voiceUi = voiceUpdateRequest.voice;

//        validateVoiceUi(voiceUi);

            if (!isAddMode) { //edit mode
                voicesInDb.remove(voiceUi);
            } else {
                voiceUi.orderIndex = voicesInDb.nextAvailableVoiceId;
                voicesInDb.nextAvailableVoiceId++;
            }

            voicesInDb.insert(voiceUi);

            OperationType operationType = isAddMode ? OperationType.ADD : OperationType.EDIT;
            updateDbAndCofman(operationType, voiceUi.id);
        }
        catch (Exception ex)
        {

            String error = "error: "+ ExceptionUtils.getMessage(ex)+"---->---> trace: "+ExceptionUtils.getStackTrace(ex);
            logger.error("update voice filed. "+error);

            return Response.status(500).entity(error).build();
        }

        return Response.ok().build();
    }

我试图重写它以便使用我的自定义模型response

如何设置响应状态代码,以便客户端知道要调用哪个回调?

    @Path("/foo")
    @PUT
    @Consumes(MediaType.APPLICATION_JSON + ";charset=utf-8")
    @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
    public VoicesOperationResult updateVoice(VoiceUpdateRequest voiceUpdateRequest) throws Exception {

        VoicesOperationResult voicesOperationResult = new VoicesOperationResult();

        try {
...
        }
        catch (Exception ex)
        {

               voicesOperationResult.status = 500;
            voicesOperationResult.message = ExceptionUtils.getMessage(ex);
            voicesOperationResult.trace = ExceptionUtils.getStackTrace(ex);

            return voicesOperationResult;
        }

        voicesOperationResult.status = 200;
        return voicesOperationResult;
    }

您可以通过添加带注释的参数来访问ServletResponse。 然后,您可以自己设置HTTP返回代码:

public VoicesOperationResult updateVoice(VoiceUpdateRequest voiceUpdateRequest, @Context HttpServletResponse response) {
  [...]
  response.setStatus(500);
}

jaxrs可能会覆盖此内容。 让我知道它是否有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM