【问题标题】:how to set the server status code for http response?如何设置http响应的服务器状态码?
【发布时间】:2017-10-19 15:10:27
【问题描述】:

我有这个 Angular 客户端代码:

        $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;
    }

【问题讨论】:

  • 我的错。现已修复

标签: javascript java angularjs


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2016-06-04
    • 2021-07-21
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多