List<String> 的 Javax 验证抛出异常

问题描述 投票:0回答:1

我正在尝试使用 javax 验证在列表中包含对字符串元素的 @Pattern 验证。下面是简化的例子:

public class ProgramRQDTO implements Serializable {

    private static final long serialVersionUID = -1L;

    @Size(min = 2, max= 5)
    private String lang;

    private List<@Pattern(regexp="^[a-zA-Z_]+$") String> destinations;

    ...getters/setters

}

此 DTO 用作 POST 请求的主体,其中使用了 @Valid 注释。

@POST
@Produces({ MediaType.APPLICATION_JSON })
public Response method(@Valid @RequestBody MyDTO requestDto) {

    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    Validator validator = factory.getValidator();
    Set<ConstraintViolation<MyDTO>> violations = validator.validate(requestDto);

    ...

}

这个方法,validator.validate(requestDto),抛出异常。

javax.validation.ValidationException: HV000187: When using type annotation constraints on parameterized iterables or map @Valid must be used. Check com.example.MyDTO#destinations

是否可以在 DTO 中验证列表而不必为该列表创建包装类?我做错了什么吗?

任何帮助表示赞赏。

我曾尝试在 DTO 的不同点包含 @Valid 注释,但我无法摆脱这个错误。

更新:

以下所有结果相同:

@有效
私人名单<@Pattern(regexp="^[a-zA-Z_]+$") String>目的地;

私人名单<@Valid @Pattern(regexp="^[a-zA-Z_]+$") String>目的地;

@有效
私人名单<@Valid@Pattern(regexp="^[a-zA-Z_]+$") String>目的地;

java dto bean-validation
1个回答
0
投票

我会按照错误消息将 @Valid 注释添加到您的 DTO 中的字段

destinations
。我想这在旧版本的 Java 验证中是必要的。在 Jakarta Bean Validation 3.O 之前

解决方案

试试这个:

public class ProgramRQDTO implements Serializable {

    @Valid
    private List<@Pattern(regexp="^[a-zA-Z_]+$") String> destinations;

}
© www.soinside.com 2019 - 2024. All rights reserved.