我有一个异常处理程序控制器,我正在捕获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”。
寻找解决这类问题的东西,我发现这篇文章 - > http://www.jayway.com/2013/02/03/improve-your-spring-rest-api-part-iii/它有一些解决方法的想法,比如使用“getMostSpecificCause”。我正在阅读它以解决我的问题。
试试这个// 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();