Spring MVC Validation 统一处理

原创
2016/05/23 11:32
阅读数 280

####Spring MVC Validation 用到JSR349,一个通用的规范,使用hibernate的实现,规则比较全。 ####Dto

public class UserDto {

    @NotEmpty(groups = {GroupA.class}, message = "01111|ID不能为空")
    private String id;
    @NotEmpty(message = "01112|用户名不能为空那么")
    private String username;
    @NotEmpty(message = "01113|密码不能为空",groups = {GroupB.class})
    private String password;
    @NotEmpty(message = "01114|名称不能为空",groups = {GroupB.class})
    private String nickname;
    private String email;
}

####Group--标记,将属性的规则组合起来

public interface GroupA {
}
public interface GroupB {
}

####Controller

@RequestMapping("/test")
@RestController
public class TestControllrt {

    /**
     * 组将规则聚合在一起。验证的时候只验证这个规则的集合。
     * 然后还可以将多个组聚合在一起验证。
     * 那么就要求组要尽量的细化。
     * @param userDto
     * @return
     */
    @RequestMapping("/test")
    public Object testSave(@Validated({GroupA.class}) UserDto userDto) {
        return "::";
    }

    /**
     * Default 是一个默认的组,所有该实体中配置了规则,但未放入组内的都在默认组中
     * @param userDto
     * @return
     */
    @RequestMapping("/test2")
    public Object testSave2(@Validated({GroupA.class, Default.class}) UserDto userDto) {
        return "::";
    }

    @RequestMapping("/test3")
    public Object testSave3(@Validated({GroupB.class, Default.class}) UserDto userDto) {
        return "::";
    }


}

####统一处理

 @ResponseBody
    @ExceptionHandler({BindException.class})
    public Object handle(BindException e) {
        e.printStackTrace();
        Map<String, String> map = new HashMap<String, String>();
        for (ObjectError error : e.getAllErrors()) {
            String[] array = StringUtils.split(error.getDefaultMessage(), "|");
            map.put(array[0], array[1]);
        }
        return map;
    }
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
2
分享
返回顶部
顶部