json - 如何处理 Spring Rest Web Service 中的 JSON 解析错误

标签 json spring rest spring-mvc spring-boot

我有一个用 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 

我想知道有没有办法针对此异常,我可以为客户端提供自定义异常消息。我不知道如何处理这个错误。

最佳答案

要为每个 Controller 自定义此消息,请使用 @ExceptionHandler 的组合和 @ResponseStatus在您的 Controller 中:

    @ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "CUSTOM MESSAGE HERE")
    @ExceptionHandler(HttpMessageNotReadableException.class)
    public void handleException() {
        //Handle Exception Here...
    }

如果您宁愿定义一次并全局处理这些异常,那么使用 @ControllerAdvice类(class):
@ControllerAdvice
public class CustomControllerAdvice {
    @ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "CUSTOM MESSAGE HERE")
    @ExceptionHandler(HttpMessageNotReadableException.class)
    public void handleException() {
        //Handle Exception Here...
    }
}

关于json - 如何处理 Spring Rest Web Service 中的 JSON 解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44850637/

相关文章:

JavaScript JSON 语法错误 : Unrecognized Expression

java - 服务层和 Controller 的代码分离

angularjs - GET 与 POST 在哪里使用哪种方法

java - Hazelcasl Rest API 二进制对象

spring - java : spring rest WS - Unable to locate object to be marshalled in a model

c# - 有没有办法让 ServiceStack.Redis 使用 JSON.NET 而不是 ServiceStack.Text?

javascript - 无法附加以 JSON 形式返回的内容

ruby-on-rails - 有没有办法使用 HashWithIndifferentAccess 序列化 ActiveRecord 的 JSON 属性?

spring - 如果有@Entity,为什么需要 "annotatedClasses"?

spring - 如何在SDN4中获取Neo4jTemplate