我一直在使用Spring MVC和hibernate注释来验证传入的请求对象,在我需要验证传入的集合之前,这一切都很好用。
@RequestMapping(value = "/guests", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Set<GuestResource>> postGuestsToAttendance(
@Valid @RequestBody Set<RequestToAddGuest> guestRequests) throws FieldValidationException,
RequestBodyResourceBadRequestException
正如我所知,它试图对Set本身进行验证,而不是对其中的个别成员进行验证。
经过一些研究后,我找不到任何“简单”的解决方案,而是在自定义验证器上找到了一些并调用它们。由于我并不真的需要自定义验证器,只是一种为集合中的每个项目调用验证的方法,我试图让它全部正常工作,但无济于事。我做错了什么?
这是我的调用代码:
for (RequestToAddGuest guestRequest : guestRequests) {
// Perform validation
BindingResult bindingResults = new DirectFieldBindingResult(guestRequest, RequestToAddGuest.class.getName());
validator.validate(guestRequests, bindingResults);
checkForErrors(bindingResults);
}
这是checkForErrors代码。当我在一个单独的物体上使用@Valid时,它的效果非常好。
protected void checkForErrors(BindingResult results) throws FieldValidationException {
if (results.hasErrors()) {
FieldValidationException exception = new FieldValidationException();
exception.setFieldErrors(results.getFieldErrors());
throw exception;
}
}
作为参考,这里是带有验证注释的RequestToAddGuest类:
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.SafeHtml;
public class RequestToAddGuest {
@NotEmpty
@SafeHtml
public String firstName;
@SafeHtml
@NotEmpty
public String lastName;
@SafeHtml
public String emailAddress;
@SafeHtml
public String streetLine1;
@SafeHtml
public String streetLine2;
@SafeHtml
public String streetLine3;
@SafeHtml
public String city;
@SafeHtml
public String stateCode;
@SafeHtml
public String zip;
@SafeHtml
public String countryCode;
@SafeHtml
public String phoneArea;
@SafeHtml
public String phoneNumber;
@SafeHtml
public String phoneExtension;
}
答案 0 :(得分:0)
好吧,我发现了问题......我已经陷入了验证码,我忽略了跟踪我的变量名......我从来没有改变验证调用来调用各个guestRequest,而不是名为guestRequest * s *
的整个列表