2017-10-19 18 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がこれを上書きする可能性があります。それが動作するかどうか私に教えてください。

関連する問題