spring mvc validator @valid不适用于集合

时间:2013-05-31 14:21:21

标签: hibernate validation spring-mvc collections invoke

我一直在使用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;

}

1 个答案:

答案 0 :(得分:0)

好吧,我发现了问题......我已经陷入了验证码,我忽略了跟踪我的变量名......我从来没有改变验证调用来调用各个guestRequest,而不是名为guestRequest * s *

的整个列表
相关问题