springboot validation 分组验证
应用:同一个pojo在不同的场景下,使用分组对field进行不同的验证
*************************
示例
*******************
pojo 层
Num
@Data
public class Num {
public interface Base{
}
public interface Sub extends Base{
}
public interface Sub2 extends Base{
}
@NotBlank(message = "id 不能为 null")
private String id;
@Min(value = 2,message = "base 不能小于 2",groups = {Base.class})
private Integer base;
@Min(value = 2,message = "num 不能小于2",groups = {Sub.class})
private Integer num;
@Min(value = 2,message = "num2 不能小于 2",groups = {Sub2.class})
private Integer num2;
}
@NotBlank表示不为空,@NotNull表示不为null,两者不一样
*******************
controller 层
HelloController
@RestController
public class HelloController {
@RequestMapping("/hello2")
public String hello2(@Validated Num num, BindingResult result){
System.out.println("hello2:"+num);
if (result.hasFieldErrors()){
result.getFieldErrors().forEach(error -> {
System.out.print("field:"+error.getField());
System.out.println(" ==> message:"+error.getDefaultMessage());
});
}
return "success";
}
@RequestMapping("/hello3")
public String hello3(@Validated({Num.Sub.class}) Num num, BindingResult result){
System.out.println("hello3:"+num);
if (result.hasFieldErrors()){
result.getFieldErrors().forEach(error -> {
System.out.print("field:"+error.getField());
System.out.println(" ==> message:"+error.getDefaultMessage());
});
}
return "success";
}
@RequestMapping("/hello4")
public String hello4(@Validated(Num.Sub2.class) Num num, BindingResult result){
System.out.println("hello4:"+num);
if (result.hasFieldErrors()){
result.getFieldErrors().forEach(error -> {
System.out.print("field:"+error.getField());
System.out.println(" ==> message:"+error.getDefaultMessage());
});
}
return "success";
}
@RequestMapping("/hello5")
public String hello5(@Validated(Num.Base.class) Num num, BindingResult result){
System.out.println("hello5:"+num);
if (result.hasFieldErrors()){
result.getFieldErrors().forEach(error -> {
System.out.print("field:"+error.getField());
System.out.println(" ==> message:"+error.getDefaultMessage());
});
}
return "success";
}
}
*************************
使用测试:id(无分组),base(base)、num(sub)、num2(sub2),sub、sub继承base
localhost:8080/hello2?id=&base=0&num=0&num2=0
2020-07-14 17:34:07.552 INFO 13896 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-07-14 17:34:07.559 INFO 13896 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 7 ms
hello2:Num(id=, base=0, num=0, num2=0)
field:id ==> message:id 不能为 null
@Validated没有指定分组,只对id进行了检验
localhost:8080/hello3?id=&base=0&num=0&num2=0
2020-07-14 17:39:28.164 INFO 12556 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-07-14 17:39:28.168 INFO 12556 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
hello3:Num(id=, base=0, num=0, num2=0)
field:num ==> message:num 不能小于2
field:base ==> message:base 不能小于 2
@Validated指定分组sub,对base、num进行检验
localhost:8080/hello4?id=&base=0&num=0&num2=0
2020-07-14 17:44:40.835 INFO 15112 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-07-14 17:44:40.839 INFO 15112 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
hello4:Num(id=, base=0, num=0, num2=0)
field:base ==> message:base 不能小于 2
field:num2 ==> message:num2 不能小于 2
@Validated指定分组sub2,对base、num2进行检验
localhost:8080/hello5?id=&base=0&num=0&num2=0
2020-07-14 17:46:26.017 INFO 13124 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-07-14 17:46:26.021 INFO 13124 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
hello5:Num(id=, base=0, num=0, num2=0)
field:base ==> message:base 不能小于 2
@Validated指定分组base,对base进行检验