spring请求参数校验
2020-12-13 04:36
标签:nta substring new load efault class private ups red 大纲: 一、参数验证 1.1注解验证 @Validated注解加到需要验证的请求对象上 未通过的验证信息回存放到BindingResult对象中。 1.2获取SmartValidator进行验证 SmartValidator在spring初始化完成的时候已经在ioc容器里了 参数验证 1.3分组校验 定义分组:定义两个内部接口A和B就是2个组别。 校验分组:修改一下Person对象上的校验注解加上groups,groups里面的内容就是需要校验的组。 例:下例中需中如果校验A组则name、age都要NotNull,如果校验B则只要nameNotNull 注解校验: 与之前的区别就是在@Validated中填入了需要校验的组别,是个数组,上例中是校验A组。 smartValidatior验证: 与之前的区别就是validate方法传入了第三个参数(组别)。 二、ConstraintValidator自定义验证 定义一个验证类 自定义注解用于待校验的属性上 用法: 我自定义的注解意思:name只能为aa,bb spring请求参数校验 标签:nta substring new load efault class private ups red 原文地址:https://www.cnblogs.com/liuboyuan/p/11093383.html
@NotNull 就是参数必传
javax.validation.constraints下面有许多注解不一一赘述、字面意思也很清晰。
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* Created by lby on 2019/6/21.
*/
@Data
public class Person {
private String name;
@NotNull
private String age;
}
@RequestMapping("/hello")
public String hello(@RequestBody @Validated Person person, BindingResult result){
if(result.hasErrors()){
List
@Autowired
SmartValidator validator;
@RequestMapping("/hello")
public String hello(@RequestBody Person person){
BindingResult result = new BeanPropertyBindingResult(person,person.getClass().getSimpleName());
validator.validate(person,result);
if(result.hasErrors()){
result.getAllErrors().forEach(item->{
System.out.println(item.getDefaultMessage());
});
}
return person.getName()+person.getAge();
}
@Data
public class Person {
@NotNull(groups = {A.class,B.class})
private String name;
@NotNull(groups = {A.class})
private String age;
public interface A{}
public interface B{}
}
@RequestBody @Validated(value = { Person.A.class}) Person person,
validator.validate(person,result,Person.A.class);
public class EnumValidImpl implements ConstraintValidator
@Constraint(validatedBy = {EnumValidImpl.class })//指定这个校验注解的实现类
@Target({ ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface EnumValid {
String[] value();
String message() default "默认报错消息";
Class>[] groups() default {};
Class extends Payload>[] payload() default {};
}
@Data
public class Person {
@EnumValid({"aa","bb"})
private String name;
private String age;
}