为什么Spring使用不同的CAUSES为JSON抛出HttpMessageNotReadableException

时间:2013-08-08 07:51:39

标签: json spring spring-mvc jackson

我有一个异常处理程序控制器,我正在捕获HttpMessageNotReadableException,如下所示:

@ExceptionHandler(HttpMessageNotReadableException.class)
    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    @ResponseBody
    protected ErrorMessage handleJsonException(final HttpMessageNotReadableException ex, final HttpServletRequest request)
{
    if (ex.getCause() instanceof JsonParseException)
    {
       // some code
    }
    if (ex .getCause() instanceof JsonMappingException)
    {
       // some code
    }
}

我在POST和PUT中遇到格式错误的json(JSON文本中缺少第一个双引号)

{firstName":"abc","lastName":"xyz"}

POST - JsonParseException

PUT - JsonMappingException

我认为两者都应该具有相同的原因“ JsonParseException ”,因为语法错误。

有人可以建议为什么spring为PUT提供不同的“ JsonMappingException ”。

2 个答案:

答案 0 :(得分:0)

寻找解决此类问题的方法,我找到了这篇文章 - > http://www.jayway.com/2013/02/03/improve-your-spring-rest-api-part-iii/ 它有一些解决方法的想法,比如使用“getMostSpecificCause”。我正在阅读它以解决我的问题。

答案 1 :(得分:0)

试试这个 //前 - > HttpMessageNotReadableException

    Throwable throwable = ex.getCause();
JsonMappingException jsonMappingException = ((JsonMappingException) throwable);
    List<JsonMappingException.Reference> references = invalidFormatException.getPath();
    for (JsonMappingException.Reference reference : references) {
        if (reference.getFieldName() != null) {
            field += reference.getFieldName() + ".";
        }
    }
    String message = jsonMappingException.getOriginalMessage();