当前位置:  开发笔记 > 编程语言 > 正文

如何在不将List包装在其他类中的情况下验证spring控制器中List中的每个对象?

如何解决《如何在不将List包装在其他类中的情况下验证spring控制器中List中的每个对象?》经验,为你挑选了1个好方法。

我有一个弹簧控制器:

@RequestMapping(value = "bulk", method = RequestMethod.POST)
@ResponseBody
public APIResponse createBulkEnquiries(@Valid @RequestBody List bulkDTOs) {
    // some code 
}

它不会验证任何bulkDTO,因为@valid不能直接在Collection元素上运行(尽管BulkDTO是可验证的)。我也不能将List包装在其他一些类中(有效)

public class ValidatableObjectsCollectionWrapper {
    @Valid
    List bulkDTOs;
}

因为它将更改输入json格式。所以我需要其他方法。

我也尝试制作一个自定义验证器进行收集

public class CollectionValidator implements Validator {

private final SpringValidatorAdapter validator;

public CollectionValidator(SpringValidatorAdapter validator) {
    super();
    this.validator = validator;
}

@Override
public boolean supports(Class clazz) {
    return Collection.class.equals(clazz);
}

@Override
public void validate(Object target, Errors errors) {

    Collection objectCollection = (Collection) target;

    for (Object object : objectCollection) {
        validator.validate(object, errors);
    }
}
}


但是不知道如何在控制器参数上调用或绑定它。



1> JB Nizet..:

不知道这是唯一的还是最好的解决方案,但是您可以使用包装对象,而无需使用@JsonValue@JsonCreator注释更改JSON 。这是一个完整的示例:

public class BulkDTOWrapper {

    private List bulks;

    @JsonCreator
    public BulkDTOWrapper(List bulks) {
        this.bulks = bulks;
    }

    public BulkDTOWrapper() {
    }

    @JsonValue
    public List getBulks() {
        return bulks;
    }

    public void setBulks(List bulks) {
        this.bulks = bulks;
    }

    public static void main(String[] args) throws IOException {
        BulkDTO b1 = new BulkDTO("hello");
        BulkDTO b2 = new BulkDTO("world");

        BulkDTOWrapper wrapper = new BulkDTOWrapper();
        wrapper.setBulks(Arrays.asList(b1, b2));

        ObjectMapper om = new ObjectMapper();
        String json = om.writeValueAsString(wrapper);
        System.out.println("json = " + json);

        BulkDTOWrapper wrapper2 = om.readValue(json, BulkDTOWrapper.class);
        System.out.println(wrapper2.getBulks().size());
    }
}

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有