2017-10-19 77 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可能會覆蓋這個。讓我知道它是否有效。

相關問題