【问题标题】:jackson 2 - Convert API response empty string to nulljackson 2 - 将 API 响应空字符串转换为 null
【发布时间】:2021-03-14 18:16:33
【问题描述】:

我想从属性转换空字符串值,并在我的 API 响应模型对象中将其替换为 null

假设 API 响应是 Transaction,其中包含 2 个类型为 TransDetailsUserDetails 的实例变量。这两个模型类包含大约 100 个字符串属性。

现在TransDetailsUserDetails 的一些属性在API 响应中显示为空字符串。

如何在 jackson 2 中将其更改为 null?

我尝试了this 解决方案,但它在课堂级别不起作用。

【问题讨论】:

  • 您能否为您的控制器和您要返回的对象提供代码。因为默认情况下,您会为在此期间没有设置任何值的每个字段获得 null ,除非您使用了一些“@JsonInclude(JsonInclude.Include.NON_NULL)”,它只会显示非 null json。如下所示。 { "system": "mySystem", "created": null, "createdBy": null }

标签: spring-boot jackson jackson-databind


【解决方案1】:

我想说,您可以在响应模型类之上使用下面的内容,这将使您的所有 null 和空字符串值不包含在 json 响应中,这意味着按照 json ,这将为 null。

@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Foo {
    private String a;
    private String b;
}

如果 a 有某个值说 A 而 b 没有(它是 null 或空),那么 json 响应将是 ->

{
    "a": "A"
}

希望你觉得这很有用。

【讨论】:

  • 问题是用null替换空字符串
【解决方案2】:

我相信你可能会尝试配置 ObjectMapper smth。如下所示

final ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);

这可能有用jackson-databind

【讨论】:

  • 我试过了,但它在 jackson 2 和最新的 spring boot APIs 中不起作用
  • 根据我的调查,我建议您不要将空字符串转换为 null 的解决方案,这就是它不起作用的原因。对此感到抱歉。目前,我认为要么需要一个设置器或自定义反序列化器,这可能是最好的选择。由于 ACCEPT_EMPTY_STRING_AS_NULL_OBJECT 的行为本身是有意的。这是根据github.com/FasterXML/jackson-databind/issues/1563
猜你喜欢
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2020-06-20
  • 1970-01-01
  • 2014-06-10
相关资源
最近更新 更多