springboot的参数校验(validation)

本文原文链接

参数校验(validation)

参数校验一般通过Validator实现,分为全局校验和局部校验,通过一个简单的例子说明:假设有一个用户类User,一个检验类UserValidator,一个测试用的TestController。本文在springboot2的基础上进行。

准备工作,3个java文件分别如下

User.java如下:

public class User {
    private int age;
    private String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

UserValidator如下:

public class UserValiduator implements Validator {

    @Override
    public boolean supports(Class<?> clazz) {

        return User.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        User user = (User)target;
		//当年龄小于零时,校验不通过
        if(user.getAge()<0){
            errors.rejectValue("age","age<0");
        }
    }
}

TestController如下:

@Controller
@RequestMapping("/test")
public class TestController{

	@RequestMapping("/valid")
	@ResponseBody
	public String testValid(@Valid User user){
		return "success";
	}
}
那么我们如何让上面的用户校验生效呢

如果要将UserValidator注册为全局验证,即任何地方都可使用,需要添加一个配置文件,配置类实现WebMvcConfigure,并复写getValidator()方法;

@Configuration
public class CommonConfig implements WebMvcConfigurer {
	@Override
    public Validator getValidator() {

        return new UserValiduator();
    }
}

如果要让UserValidator仅在TestController中可用,则需要使用@InitBinder在控制器中完成校验器的注册,如下:

@Controller
@RequestMapping("/test")
public class TestController{

	@InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.addValidators(new UserValidator());
    }
	
	@RequestMapping("/valid")
	@ResponseBody
	public String testValid(@Valid User user){
		return "success";
	}
}
参数校验测试

访问 localhost/test/valid?name=zhangsan&age=10结果返回:success
访问 localhost/test/valid?name=zhangsan&age=-1,结果报错:Field error in object 'user' on field 'age': rejected value [-1]

需要注意的是:

  • 被校验的参数前需要加上@Valid注解才能生效,之前看过有些文章中没有加也能生效,测试的时候必须要加才能生效
  • 官网的实例中配置类上还加入了@EnableWebMvc这个注解,加上这个注解会覆盖自己的application.yml配置文件中的mvc相关配置,若自己已经在配置文件中有相关配置,则无需加入这个注解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值