对于后端的参数校验,我们一直在强调的验证规则,提示信息的重用。这不,springmvc通过集成Valid最大程序减少了我们的工作量。其实后端的参数过滤,是分几种请求来源的。每种的处理都不太一样,但是我们如果能重用验证规则,提示信息,那就很强大了。
1 常用的表单提交,需要页面返回错误信息
2 AJAX提交,需要JSON格式返回,或者XML
3 接口调用,同样需要对应的数据格式返回
对于这3类请求,我今天讲的是第3种,是可以重用第1种的资源和验证规则。它就是ControllerAdvice(控制建议)
1
/**
2 * Indicates the annotated class assists a "Controller".
3 *
4 * <p>Serves as a specialization of { @link Component @Component}, allowing for
5 * implementation classes to be autodetected through classpath scanning.
6 *
7 * <p>It is typically used to define { @link ExceptionHandler @ExceptionHandler},
8 * { @link InitBinder @InitBinder}, and { @link ModelAttribute @ModelAttribute}
9 * methods that apply to all { @link RequestMapping @RequestMapping} methods.
10 *
11 * @author Rossen Stoyanchev
12 * @since 3.2
13 */
2 * Indicates the annotated class assists a "Controller".
3 *
4 * <p>Serves as a specialization of { @link Component @Component}, allowing for
5 * implementation classes to be autodetected through classpath scanning.
6 *
7 * <p>It is typically used to define { @link ExceptionHandler @ExceptionHandler},
8 * { @link InitBinder @InitBinder}, and { @link ModelAttribute @ModelAttribute}
9 * methods that apply to all { @link RequestMapping @RequestMapping} methods.
10 *
11 * @author Rossen Stoyanchev
12 * @since 3.2
13 */
中文的大概意思就是:
A 定义异常处理
B 初始化binder,比如一些类型转换,自定义验证等等
C 设置ModelAttribute的值
看到没有,异常处理。刚好spring有提供 MethodArgumentNotValidException这个异常,而这个异常就是处理参数验证不通过会抛出的。
哈哈哈,太好了。这样,我就可以在这里面,去封装Valid的异常
如图
里面的processValidationError方法会处理具体异常的返回值并以JSON输出,大功告成,下周再贴出整体代码链接。
当这样处理之后,我们的resetful的接口只用处理真正的业务,完全不用做常用的参数检查。