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相關配置,若自己已經在配置文件中有相關配置,則無需加入這個註解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章