[英]bean validation together with Spring
Tomcat application, and I use Spring for dependency injection. Tomcat应用程序,我使用Spring进行依赖注入。 I also use Jersey for rest calls, now I need to do some bean validation.
我还使用Jersey进行休息调用,现在我需要做一些bean验证。 I found examples that it is easy to to if I were using Spring MVC @RequestMapping for rest calls.
我找到了一些例子,如果我使用Spring MVC @RequestMapping进行休息调用很容易。 But using Jersey and hibernate validator together things got ugly.
但是使用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");
}
..
}
This works, but I need to repeat this for every post request. 这有效,但我需要为每个帖子请求重复此操作。 Which is ugly.
这很难看。
Is there a way to neatly handle bean validation here? 有没有办法整齐地处理bean验证?
You could improve it a bit by having a generic validate method that takes an Object as parameter, eg: 您可以通过使用将Object作为参数的通用验证方法来改进它,例如:
public static void validateBean(Object object) {
Set<ConstraintViolation<Object>> violations = validator.validate(object);
if(violations.size()>0){
throw new BadRequestException("illegal input");
}
}
Then you just have to call validateBean(someObject);
然后你只需要调用
validateBean(someObject);
at the beginning of each post method. 在每个帖子方法的开头。
What about use also contrainst groups XD. 那么使用也是对抗组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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.