####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;
}