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

问题描述 投票:1回答:2

我有一个异常处理程序控制器,我正在捕获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
    }
}

我得到了错误的json的POST和PUT的不同原因(JSON文本中缺少第一个双引号)

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

POST - JsonParseException

PUT - JsonMappingException

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

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

json spring spring-mvc jackson
2个回答
0
投票

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


0
投票

试试这个// ex - > 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();
© www.soinside.com 2019 - 2024. All rights reserved.