与Spring一起验证bean

时间:2014-02-10 13:57:01

标签: java spring hibernate jersey

Tomcat应用程序,我使用Spring进行依赖注入。我还使用Jersey进行休息调用,现在我需要做一些bean验证。我找到了一些例子,如果我使用Spring MVC @RequestMapping进行休息调用很容易。但是使用Jersey和hibernate验证器一起变得很丑陋。

@POST
@Path("/addSomething")
public void addSomething(Something something) {

    Set<ConstraintViolation<Something>> violations = validator.validate(something);
    if(violations.size()>0){
        throw new BadRequestException("illegal input");
    }

   ..
}

这有效,但我需要为每个帖子请求重复此操作。这很难看。

有没有办法在这里巧妙地处理bean验证?

2 个答案:

答案 0 :(得分:1)

您可以通过使用将Object作为参数的通用验证方法来改进它,例如:

public static void validateBean(Object object) {
    Set<ConstraintViolation<Object>> violations = validator.validate(object);
    if(violations.size()>0){
        throw new BadRequestException("illegal input");
    }
}

然后你只需要在每个帖子方法的开头调用validateBean(someObject);

答案 1 :(得分:1)

如何使用约束组XD。

public void validateEntity(final Object object, final Class<? extends Default>... classes)
        throws IllegalArgumentException {
    final Set<ConstraintViolation<Object>> errors = validator.validate(object, classes);
    if (!errors.isEmpty()) {
        throw new IllegalArgumentException(returnErrors(errors));
    }
}


public String returnErrors(final Set<ConstraintViolation<Object>> errors) {
    final StringBuilder builder = new StringBuilder();
    for (final ConstraintViolation<Object> error : errors) {
        builder.append(error.getMessage());
    }
    return builder.toString();
}