在java中收集bean的JSR 303验证?

时间:2016-02-23 13:34:26

标签: java bean-validation

我正在尝试验证bean的集合,它看起来如下,

 public class Employee{
    @NotNull(message = "The name parameter is mandatory")
    @NotEmpty(message = "Please provide a valid value for name parameter")
    protected String name;
    protected String address;
    protected String phone;

//getters and setters

}


public class Employees{
    @NotNull(message = "The town parameter is mandatory")
    @Valid
    protected List<Employee> employees;
    //getters and setters
}

@RequestMapping(value = "/addEmployees", method = RequestMethod.POST, headers = "Accept=application/json")
public String addEmployees(
        @Valid @RequestBody Employees employees, BindingResult result){
                if(result.hasErrors){
                    List<ObjectError> errors = result.getAllErrors();
                    for (ObjectError error : errors) {
                        System.out.println(error.getDefaultMessage());
                    }
                }
                //business logic
}

请求:

{
    "employees":[
        {
            "name":"John",
            "address":"New York",
            "phone":"12312123"
        },
        {
            "name":"Scott",
            "address":"New Jersey",
            "phone":"12312123"
        }
    ]
}

要求是针对上述请求,它应该将employees集合中每个Employee的验证错误记录到BindingResult。 因此,如果请求中不存在名称,则应打印 “name参数是必需的。”

1 个答案:

答案 0 :(得分:0)

暂时添加此作为答案:

最有可能的是,您尚未初始化验证器。在spring spring MVC spring配置文件中,添加以下内容:

<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

spring docs中解释了这一点。