SpringMVC中@RequestBody引起的400异常处理,返回校验失败具体信息

简介:

问题

使用@RequestBody接收一个json数据的时候,如果传入的参数不符合条件,就会直接返回400的error page. 但究竟是为什么会400并没有抛出来。这对大量参数字段的我们来说,排错很困难,所以应该返回出错的原因。

Resolve

This was raised as an issue with Spring SPR-7439 - JSON (jackson) @RequestBody marshalling throws awkward exception - which was fixed in Spring 3.1M2 by having Spring throw a org.springframework.http.converter.HttpMessageNotReadableException in the case of a missing or invalid message body.

以上来自stackoverflow.

具体就是当spring的@RequestBody注解进行marshall操作的时候,如果jackson跑出异常,就会抛出一个叫做HttpMessageNotReadableException的异常,那么我们只要捕获并返回这个异常就可以了。

具体做法

最简单是在controller里加一个错误处理的方案:

@ExceptionHandler({HttpMessageNotReadableException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public CodeMsg resolveException(HttpMessageNotReadableException errors) {

    return CodeMsg.error(errors.getMessage());
}

如果想要对所有的controller生效,那么需要一个注解@ControllerAdvice:


@ControllerAdvice
public class GeneralHandler {

   @ExceptionHandler
   public ModelAndView handleException (NoSuchRequestHandlingMethodException ex) {
        ModelAndView mav = new ModelAndView();
        ...
        return mav;
   }
}

所以,可以处理你想要的异常:


@ExceptionHandler
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
public RestError resolveBindingException ( MethodArgumentNotValidException methodArgumentNotValidException, Locale locale )
{
    BindingResult bindingResult = methodArgumentNotValidException.getBindingResult();
    return getRestError(bindingResult, locale);
}




本文转自Ryan.Miao博客园博客,原文链接:http://www.cnblogs.com/woshimrf/p/6602690.html,如需转载请自行联系原作者
相关文章
|
JSON 前端开发 Java
springmvc-JSR303进行服务端校验&分组验证&SpringMVC定义Restfull接口&异常处理流程&RestController异常处理
springmvc-JSR303进行服务端校验&分组验证&SpringMVC定义Restfull接口&异常处理流程&RestController异常处理
|
XML Java API
SpringMVC进阶-校验框架
SpringMVC进阶-校验框架
62 0
|
前端开发 JavaScript Java
SpringMVC--服务器表单校验
SpringMVC--服务器表单校验
62 0
|
前端开发 Java Spring
Spring MVC-02循序渐进之解耦控制器和校验器
Spring MVC-02循序渐进之解耦控制器和校验器
77 0
|
前端开发 Java 数据库连接
spring mvc控制层@Validated参数校验
spring mvc控制层@Validated参数校验
219 0
spring mvc控制层@Validated参数校验
|
JSON 前端开发 JavaScript
【SpringMVC 从 0 开始】HttpMessageConverter 报文信息转换器
【SpringMVC 从 0 开始】HttpMessageConverter 报文信息转换器
【SpringMVC 从 0 开始】HttpMessageConverter 报文信息转换器
|
前端开发 JavaScript Java
【Spring MVC】(五)页面在 WEB-INF 下的处理方式(jsp页面、html页面)、SpringMVC 参数校验
【Spring MVC】(五)页面在 WEB-INF 下的处理方式(jsp页面、html页面)、SpringMVC 参数校验
759 0
【Spring MVC】(五)页面在 WEB-INF 下的处理方式(jsp页面、html页面)、SpringMVC 参数校验
|
前端开发 Java API
让Controller支持对平铺参数执行数据校验(默认Spring MVC使用@Valid只能对JavaBean进行校验)【享学Spring】
让Controller支持对平铺参数执行数据校验(默认Spring MVC使用@Valid只能对JavaBean进行校验)【享学Spring】
让Controller支持对平铺参数执行数据校验(默认Spring MVC使用@Valid只能对JavaBean进行校验)【享学Spring】
|
5月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】
|
4月前
|
设计模式 前端开发 Java
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
56 1