我有一个使用Spring Boot开发的休息Web服务。我能够处理由于我的代码而发生的所有异常,但是假设客户端发布的json对象与我想要对其进行去序列化的对象不兼容有,我得到
"timestamp": 1498834369591,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.http.converter.HttpMessageNotReadableException",
"message": "JSON parse error: Can not deserialize value
我想知道是否有一种方法可以为此异常提供客户端自定义异常消息。我不知道如何处理这个错误。
答案 0 :(得分:10)
要为每个控制器自定义此消息,请在控制器中使用@ExceptionHandler
和@ResponseStatus
的组合:
@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "CUSTOM MESSAGE HERE")
@ExceptionHandler(HttpMessageNotReadableException.class)
public void handleException() {
//Handle Exception Here...
}
如果你想定义一次并全局处理这些异常,那么使用@ControllerAdvice
类:
@ControllerAdvice
public class CustomControllerAdvice {
@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "CUSTOM MESSAGE HERE")
@ExceptionHandler(HttpMessageNotReadableException.class)
public void handleException() {
//Handle Exception Here...
}
}
答案 1 :(得分:0)
您还可以扩展 ResponseEntityExceptionHandler 并覆盖方法 handleHttpMessageNotReadable (在Kotlin中为示例,但在Java中非常相似):
override fun handleHttpMessageNotReadable(ex: HttpMessageNotReadableException, headers: HttpHeaders, status: HttpStatus, request: WebRequest): ResponseEntity<Any> {
val entity = ErrorResponse(status, ex.message ?: ex.localizedMessage, request)
return this.handleExceptionInternal(ex, entity as Any?, headers, status, request)
}