当前位置: 首页 > 知识库问答 >
问题:

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

齐昊苍
2023-03-14

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

java prettyprint-override">public class Foo {

    @Size(min = 2)
    private String bar;

}

如果客户端发送 bar 属性,则验证 bar。预期:如果客户端不发送属性,则不会验证任何内容。

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

我想我可以通过DeserializationFeature.ACCEPT配置杰克逊的行为_EMPTY_STRING_AS_NULL_OBJECT但正如这里回答的那样,这只适用于POJO,而不适用于Strings。我看到的唯一方法是不使用@大小或为Strings编写自己的反序列化程序。两者似乎都不是很好的解决方案。还有其他想法吗?

共有1个答案

通煜祺
2023-03-14

如果要接受空字符串,可以使用@Pattern约束来匹配空字符串:@Pattern(regexp=“^$|(.){2}”)@Pattern(regexp=“^$|..)。

另一种方法是编写自己的自定义约束。

 类似资料:
  • 问题内容: 我有以下类,它是由Jackson映射的(简化版): 在某些情况下,服务器会返回,然后我想将name设置为空的Java String。 是否有任何Jackson注释,或者如果属性为,我应该只检查getter中的null并返回空字符串? 问题答案: 您可以在默认构造函数中或声明时进行设置: 要么

  • 我有以下由Jackson映射的类(简化版): 在某些情况下,服务器返回,然后我想将name设置为空Java字符串。 是否有任何Jackson注释,或者如果属性为,我应该只检查getter中的null并返回空字符串吗?

  • 我有一个JSON字符串,它将空列表标记为而不是。因此,例如,如果我有一个没有子对象的对象,我将收到这样的字符串: 我想将其反序列化为父类,将子类正确设置为子类的空列表。 对于上面的JSON字符串,我想要一个将其id设置为13的对象,并将子元素设置为新的ArrayList 我知道如何为整个类使用注释 然后呢 但是,我想解决从字符串正确实例化列表的一般问题: 我能得到这样的东西吗?

  • 我有多个POJO,对于其中的一些,我希望将所有空字符串反序列化为。

  • 使用jackson-module-Scala,我尝试使用Long as键序列化和反序列化一个带有内部映射的对象,但是Jackson将键序列化为字符串,如果gnoring类中EKINED的类型,它就不会反序列化为Long。是虫子吗?我做错什么了吗? null 示例:https://github.com/angelcervera/jackson-scala-map-bug

  • 问题内容: 我有这个字符串: 我正在反序列化对象: 该对象看起来像: 并尝试创建字典: 但得到。 可能是什么问题? 问题答案: 请参阅mridula的答案,了解为什么您会得到null。但是,如果您想直接将json字符串转换为字典,则可以尝试以下代码段。

  • 我有一个Android应用程序,与Spring开发的RESTAPI联系。应用程序很好地序列化了一个对象,但是Spring应用程序在每个字段不为null时将其解析为null。有什么不对劲?我该怎么办? 这是REST API方法签名:cambioPassword(@quiestHeader(授权)字符串头,PasswordChange userData) 注意:应用程序和API都使用Gson(我没有在

  • 问题内容: 类型1(docs链接): 类型2(docs链接): 尽管以上两种类型都能完成任务,但这些实现之间有什么区别? 问题答案: 构造之后,两者都调用相同的反序列化功能,因此唯一的区别是泛型类型的处理方式。 第二个是完全静态的,因此类型必须在编译类型中是已知的,并且不能改变。因此,它类似于使用基本Class文字。 第一个是动态的,因此可以用于构造因其参数设置而变化的事物。 就我个人而言,我更喜