2017-06-20 55 views
2

我有一個控制器在春季啓動應用程序,它使用Hibernate驗證器驗證輸入。當我調用其餘端點時,它會正確驗證,但我的控制器建議不會捕獲它來自定義消息。我們只獲得空載有效的404代碼。春天mvc驗證異常不處理ControllerAdvice

@RestController 
public class Controller { 

    @RequestMapping(method = RequestMethod.POST, path = RestPaths.LOAD_DATA) 
    public void loadCostCenterData(@RequestBody @Valid ClientDto dto) { 
    } 
} 

@RestControllerAdvice 
public class WickesGlobalExceptionMapper extends ResponseEntityExceptionHandler { 

    @ExceptionHandler(Exception.class) 
    public ResponseEntity handleOtherUnexpectedException(Exception ex, WebRequest request) { 
    } 

} 
+0

你能分享應用程序日誌?當你遇到404錯誤時,你在控制檯上做了什麼? – fiskra

+1

我會說這是因爲RestControllerAdvise註釋暗示你的方法有@ReponseBody。 改爲使用ControllerAdvise。 – Rlarroque

+0

謝謝@Rlarroque,你是對的。休息是原因,當我刪除它時,它開始正常工作。 – krmanish007

回答

1

下面是一個使用模型視圖,而不是ResponseEntity工作ControllerAdvise:

@ControllerAdvice 
public class WickesGlobalExceptionMapper { 

    @ExceptionHandler(IllegalArgumentException.class) 
    @ResponseStatus(HttpStatus.BAD_REQUEST) 
    public ModelAndView handleInvalidArgument(IllegalArgumentException ex) { 
    ModelAndView modelAndView = new ModelAndView(); 
    modelAndView.setView(new MappingJackson2JsonView()); 
    modelAndView.addObject("errorMessage", format("{0}", errorMessage)); 
    return modelAndView; 
    } 
}