【问题标题】:spring mvc validator @valid doesn't work for collectionsspring mvc验证器@valid不适用于集合
【发布时间】:2013-05-31 14:21:21
【问题描述】:

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

}

【问题讨论】:

    标签: hibernate validation spring-mvc collections invoke


    【解决方案1】:

    好的,我发现了问题...我已经陷入验证代码中,我忽略了跟踪我的变量名...我从未更改过验证调用以在单个 guestRequest 上调用,而不是在名为 guestRequest*s*

    的整个列表中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2016-08-17
      相关资源
      最近更新 更多