2017-10-19 76 views
0

我有这样的角的客户端代码:如何设置http响应的服务器状态码?

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

我的不好。现在修好 –

回答

0

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

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

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

相关问题