JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation。
基本应用
一、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
二、给参数对象添加校验注解
@Data
public class User {
private Integer id;
@NotBlank(message = "用户名不能为空")
private String username;
@Pattern(regexp = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$", message = "密码必须为8~16个字母和数字组合")
private String password;
@Email
private String email;
private Integer gender;
}
三、Controller 中需要校验的参数Bean前添加 @Valid 开启校验功能,紧跟在校验的Bean后添加一个BindingResult,BindingResult封装了前面Bean的校验结果。
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("")
public Result save (@Valid User user , BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
Map<String , String> map = new HashMap<>();
bindingResult.getFieldErrors().forEach( (item) -> {
String message = item.getDefaultMessage();
String field = item.getField();
map.put( field , message );
} );
return Result.build( 400 , "非法参数 !" , map);
}
return Result.ok();
}
}
@Valid 不能写在方法上,要写在参数前,同时绑定对象时需要用到@RequestBody ,否则参数不能自动绑定到vo类,
BindingResult result 要紧随其后,作为绑定的结果,使用hasErrors 方法判断是否绑定成功, result.getFieldError().getDefaultMessage(),输出绑定失败的错误信息(vo类中,注解括号里的message信息)
四、@Validated:可以用在类、方法和方法参数上。 可以分组
@NotEmpty(groups={First.class})
@Size(min=3,max=8,groups={Second.class})
private String name;
@Controller
public class FirstController {
@RequestMapping("/addPeople")
//不需验证ID
public @ResponseBody String addPeople(@Validated People p,BindingResult result)
{
System.out.println("people's ID:" + p.getId());
if(result.hasErrors())
{
return "0";
}
return "1";
}
@RequestMapping("/updatePeople")
//需要验证ID
public @ResponseBody String updatePeople(@Validated({First.class}) People p,BindingResult result)
{
System.out.println("people's ID:" + p.getId());
if(result.hasErrors())
{
return "0";
}
return "1";
}
}
https://blog.csdn.net/larger5/article/details/79744569?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160475038619724842931647%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160475038619724842931647&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-6-79744569.pc_first_rank_v2_rank_v28&utm_term=springboot+JSR303&spm=1018.2118.3001.4449
https://www.cnblogs.com/applesnt/p/12676373.html
https://www.jianshu.com/p/1dff31a1649d