如何将JSR 303验证添加到方法的参数

时间:2016-06-17 05:19:58

标签: java spring validation hibernate-validator

我想使用Hibernate Validator来验证我的方法的参数。

我试图查找示例,并通过以下示例 JSR 303. Validate method parameter and throw exception

但答案并没有完全解决我的问题,而且答案中的链接也已过期。

以下是我尝试过的示例代码。

//removing imports to reduce the length of code. 

/**
 * Created by Nick on 15/06/2016.
 */

@Component
public class ValidationService {

    @Value("${namesAllowed}")
    private String validNames;

    @Autowired
    private Validator validator;

    public boolean validateName(
            @NotEmpty
            @Pattern(regexp = ".*'.*'.*")
            @Email
            @Length(max = 10)
                    String name
    ) {

        Set<ConstraintViolation<String>> violations = validator.validate(name);

        for (ConstraintViolation<String> violation : violations) {
            String propertyPath = violation.getPropertyPath().toString();
            String message = violation.getMessage();
            System.out.println("invalid value for: '" + propertyPath + "': " + message);
        }
        List<String> namesAllowed= Arrays.asList(validNames.split(","));
        if (namesAllowed.contains(name.substring(name.indexOf(".") + 1))) {
            return true;
        }
        return false;
    }
}

}

1 个答案:

答案 0 :(得分:1)

方法验证已经标准化为Bean Validation 1.1的一部分。您可以在Hibernate Validator reference guide中了解有关它的更多信息。

使用Spring,您需要配置MethodValidationPostProcessor bean并使用@Validated注释受约束的类。 this answer也可能对您有所帮助。