繼承spring的validator接口,實現對數據的校驗


  在org.springframework.validation這個包中提供了一些對數據校驗的方法,其中Validator接口是其中的一個。

現在用Validator接口,完成對數據的校驗.

      第一步:先定義一個domain對象:Person:

Person的代碼如下:

package com.validation;

public class Person {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

        第二步定義PersonValidator類,這個類繼承了Validator這個類:

package com.validation;


import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

public class PersonValidator implements Validator {
    @Override
    public boolean supports(Class<?> clazz) {
        return Person.class.equals(clazz);
    }
    @Override
    public void validate(Object obj, Errors e) {
        ValidationUtils.rejectIfEmpty(e, "name", "name.empty");
        Person p = (Person) obj;
        if (p.getAge() < 0) {
            e.rejectValue("age", "negativevalue");
        } else if (p.getAge() > 110) {
            e.rejectValue("age", "too.darn.old");
        }
    }
}

  第三步:controller層的代碼如下:

package com.validation;

import com.entity.Bar;
import com.entity.BarValidator;
import com.entity.Foo;
import org.springframework.beans.PropertyValues;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.DataBinder;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;

@RestController
public class FooController {
    @RequestMapping("/peopleTest")
    public String people(Person person){

        PersonValidator validator = new PersonValidator();
        if(validator.supports(Person.class)){
            BindException errors = new BindException(person, "person");
            validator.validate(person,errors);
            List<ObjectError> allErrors = errors.getAllErrors();
            System.out.println("size="+allErrors.size());
            for (int i=0;i<allErrors.size();i++) {
                System.out.println(allErrors.get(i).getCode());
            }

        }
        return "success";
    }
}

第四步:springboot的啟動類的代碼如下:

package com.validation;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

第五步:在瀏覽器的地址欄中輸入:http://localhost:8080/peopleTest?age=200  注意這里的age如果不寫的話,會報NullPointException.如你只寫為:http://localhost:8080/peopleTest

輸出結果為:

size=2
name.empty
too.darn.old


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM