Spring 请求映射转换异常
我有一个SpringRequestMapping,它采用JSON结构并将其转换为POJO。如果我发送一个格式错误的JSON结构的路由,我会收到一个“400错误请求”,但我希望收到的是一条错误消息,说明这是一个错误请求的原因。我有一个验证器也在检查JSON结构,但是如果结构无法转换,它似乎不会被调用。是否有一种方法可以访问内置的HttpMessageConverter错误或异常?我认为您可以通过重写Spring 请求映射转换异常,spring,spring-mvc,Spring,Spring Mvc,我有一个SpringRequestMapping,它采用JSON结构并将其转换为POJO。如果我发送一个格式错误的JSON结构的路由,我会收到一个“400错误请求”,但我希望收到的是一条错误消息,说明这是一个错误请求的原因。我有一个验证器也在检查JSON结构,但是如果结构无法转换,它似乎不会被调用。是否有一种方法可以访问内置的HttpMessageConverter错误或异常?我认为您可以通过重写handleHttpMessageEndable方法来使用 发件人:: 如果您希望通过@Except
handleHttpMessageEndable
方法来使用
发件人::
如果您希望通过@ExceptionHandler方法写入错误内容,则可以扩展ResponseEntityExceptionHandler。这是@ControllerAdvice类提供@ExceptionHandler方法来处理标准Spring MVC异常和返回ResponseEntity的方便基础。这允许您使用消息转换器自定义响应和写入错误内容。有关更多详细信息,请参阅ResponseEntityExceptionHandler javadocs
ResponseEntityExceptionHandler
的示例用法如下:
否则,您可以在此处找到更多spring mvc异常处理方法:
如果您的需求不太复杂,您可能只想使用一个响应TityExceptionHandler用于识别SpringMVC特定的异常,并为它们实施一个常见的错误响应处理策略 它包括许多方法,例如:
@ControllerAdvice
public class JavaWebExeptionHandler extends ResponseEntityExceptionHandler {
public class ExpnDetails {
public int expnCode;
public String expnMessage;
}
// A single place to customize the response body of all exception types.
@Override
protected ResponseEntity<ExpnDetails> handleExceptionInternal(Exception ex, Object body,
HttpHeaders headers,HttpStatus status, WebRequest request) {
return new ResponseEntity<Object>(new ExpnDetails(status.value(), ex.getMessage()), status);
}
}
注意此解决方案还有助于隐藏容器(例如tomcat服务器)的详细信息,以便在请求失败时出现在响应错误中。感谢您的回复。我相信这已经让我走上了解决这个问题的正确道路。我向我的控制器添加了一个简单的
@ExceptionHandler
,发现了一些奇怪的东西。当我尝试向路由发送JSON数据时,我得到一个javax.servlet.ServletException:无法解析名为“dispatcherServlet”的servlet中名为“group/person”的视图。此时,我甚至不确定路由是否接收到格式错误的JSON数据,因为无法找到路由本身。但是,如果我发送一个格式良好的JSON结构,那么该路由将被调用。很高兴听到您正在取得进展。有些事情听起来有点奇怪,如果你发布一个你的问题的简化例子,可以让你看到更多的东西。
{
"expnCode": 415,
"expnMessage": "Content type 'application/json1' not supported"
}
{
"expnCode": 400,
"expnMessage": "JSON parse error: Unexpected character ('"
' (code 34)): was expecting comma to separate Object entries; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('
"' (code 34)): was expecting comma to separate Object entries at [Source: (PushbackInputStream); line: 3, column: 4]"
}