java - 如何向方法的参数添加 JSR 303 验证

标签 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;
    }
}

}

最佳答案

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

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

关于java - 如何向方法的参数添加 JSR 303 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37873638/

相关文章:

java - Spring Repository 删除规范

javascript - 古老的形式验证

java - 从 Windows 命令提示符将 unicode 字符串传递给 java

java - 为什么我的自定义登录页面不显示 Spring Security 4?

java - Java 中高效的 JSON 搜索

jquery - 空输入返回 false 仅适用于一个输入,不适用于两个输入

mysql - 是否有任何 SQL 验证器可以针对多个数据库服务器检查语法?

java - 您可以访问用户尝试连接的 IP 地址吗?

spring - 为什么我们需要 jackson 数据绑定(bind)?

java - 自定义过滤器中修改后的 HttpServletResponse 被截断为原始响应长度