2015-10-15 110 views
0

我傳遞一個頭彈簧REST API,如:如何返回響應體時,頭部丟失春季REST API

@RequestHeader(value="test-header") 

頭是強制性這裏的API,所以我不希望保持可選。 當沒有頭文件傳遞時,任何對API的調用都會返回一個標準的400錯誤,指出請求在合成上是錯誤的,然後它不會進入REST API。但是,我想要構造一個適當的ResponseBody併爲此錯誤返回一個json。我不確定要做到這一點的最佳方式。我想過使用spring攔截器並檢查這個頭文件是否通過了,但是我不確定是否可以從這裏創建一個響應者。至少我無法弄清楚如何去做。

將攔截器的方法爲此工作嗎?如果是,如何?如果不是,那麼有什麼選擇?有人可以幫忙嗎?

更新:

這是REST API是如何:

public void methodA(@RequestHeader(value="test-header") String header, @RequestBody User user, HttpServletRequest httpRequest, HttpServletResponse httpResponse) { 
... 
... 

} 

當頭存在時,它會進入REST API,並繼續與邏輯。但是,如果標題不存在,它不會進入API並只返回一個標準的400錯誤。

的攔截器,我寫的是這樣的:

public class XXXInterceptor extends HandlerInterceptorAdapter { 
    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
... 
... 
... 

return true; 
} 

}

+0

你怎麼處理,如果該參數不存在請求?你的處理程序是什麼樣的? –

回答

0

STEP1:像@Valid使用Spring的驗證註釋,以驗證您的要求。

第2步:編寫您的自定義驗證器類。它將負責檢查標題並查看它是否具有價值或具有預期值。

步驟3:如果請求不正確,validator會拋出您的自定義異常。

第4步:編寫您的異常處理程序類。在類中定義如果發現STEP 3中的異常,我必須返回哪些響應。

欲瞭解更多關於Exception Handling in Spring的信息。

在我們目前的projet中,我們使用java攔截器來驗證請求,但沒有任何事情可以證明。

+0

但是我在哪裏定義這種情況下的異常處理程序?我在進入REST API時使用異常處理程序。但是,在這種情況下,由於缺少標頭(這是強制性的),它甚至不會輸入REST API。那麼,在這裏爲這種情況定義異常處理程序? – user1892775

+0

如果您有異常處理程序,那麼讓您的處理程序捕獲400異常,並在處理程序中定義您希望發送的響應。 –

+0

使用這種方法,我能夠返回響應主體嗎? - 基本上我可能想返回更詳細的具體信息的一些JSON。另外,我正在尋找使用驗證器的例子嗎?如果你有一個有類似作參考的例子,請告訴我。感謝您的幫助 – user1892775

0

寫有註釋@ExceptionHandler的方法和使用ServletRequestBindingException.class因爲這個異常在丟失的情況下拋出。您可以從此方法返回任何類型的對象。

例如

@ExceptionHandler(ServletRequestBindingException.class) 
public ResponseEntity<ResponseObject> handleHeaderError(){ 

    ResponseObject responseObject=new ResponseObject(); 
    responseObject.setStatus(Constants.ResponseStatus.FAILURE.getStatus()); 
    responseObject.setMessage(header_missing_message); 

    ResponseEntity<ResponseObject> responseEntity=new ResponseEntity<ResponseObject>(responseObject, HttpStatus.BAD_REQUEST); 
    return responseEntity; 
}