Jackson 和 Bean 验证:将空字符串反序列化为 null

Jackson and Bean Validation: Deserialize empty String as null

我有一个使用 Jackson 和 Bean 验证的 RESTeasy 应用程序。一个 POJO 可能像这样:

public class Foo {

    @Size(min = 2)
    private String bar;

}

如果客户端发送柱 属性,则柱被验证。并且 es 预期:如果客户端不发送 属性,则不会验证任何内容。

如果客户端发送空字符串,我将违反约束。这可能是正确的,但很难控制空输入字段的实际值。例如在我的 angular 应用程序中,如果用户没有输入任何内容,该字段将不会出现。一旦他输入并删除了一些东西,我就会得到一个空字符串。

我想我可以通过 DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT but as answered here 配置 Jacksons 的行为,这只适用于 POJO,不适用于字符串。我看到的唯一方法是不使用 @Size 或为字符串编写自己的反序列化器。两者似乎都不是好的解决方案。还有其他想法吗?

如果你想接受空字符串,你可以使用 @Pattern 约束匹配空字符串:@Pattern(regexp = "^$|(.){2}")@Pattern(regexp = "^$|...

另一种方法是写下您的 own custom constraint