1

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

4

2 回答 2

0

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

于 2013-11-07T21:21:09.637 回答
0

试试这个 //ex -> HttpMessageNotReadableException

    Throwable throwable = ex.getCause();
JsonMappingException jsonMappingException = ((JsonMappingException) throwable);
    // import 'InvalidFormatException' from  com.fasterxml.jackson.databind.exc package
    List<JsonMappingException.Reference> references = ((InvalidFormatException)throwable).getPath();
    for (JsonMappingException.Reference reference : references) {
        if (reference.getFieldName() != null) {
            field += reference.getFieldName() + ".";
        }
    }
    String message = jsonMappingException.getOriginalMessage();
于 2016-07-25T15:56:50.833 回答