【问题标题】:Change JSON value from null to empty String将 JSON 值从 null 更改为空字符串
【发布时间】:2020-09-21 22:00:07
【问题描述】:

我正在制作一个返回 json 的休息控制器。我从数据库中获取这些数据,使用 setter getter 映射到 java 类。

{
  "example": null,
  "this": null,
  "is": null,
  "only": null,
  "example": null,
  "foo": null,
  "bar": null,
  "blabla": null,
  "lala": null
} 

这是因为数据库中的数据不存在。但我希望数据是这样的:

{
      "example": ""    ,
      "this": "",
      "is": "",
      "only": "",
      "example": "",
      "foo": "",
      "bar": "",
      "blabla": "",
      "lala": ""
 }

我有 100 多个字段。所以我认为在每个变量中都使用 if else 不好。

【问题讨论】:

  • 你是如何反序列化 json 的?你能在那里添加那个逻辑吗?
  • @TomerShetah 我正在使用 ObjectMapper.valueToTree,它仍然为空。我使用类然后返回控制器仍然得到空值。

标签: java spring-boot jackson


【解决方案1】:

您可以覆盖默认 ObjectMapper(由 Spring Boot 自动配置提供)并配置全局格式以用于 String 类型的属性。

@Configuration
public class JacksonConfiguration {

    @Bean
    ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        final var objectMapper = builder.createXmlMapper(false).build();
        objectMapper.configOverride(String.class).setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));
        return objectMapper;
    }

}

【讨论】:

  • java8中的var是否等于对象?
  • var 可用于局部变量声明而不是变量的类型。它从 Java 10 开始可用。Java 8 等效语法是 - final ObjectMapper objectMapper = ...
  • 如果 db 中的数据不存在,它仍然为 null。
  • 确保将 Spring 配置的 ObjectMapper 注入到控制器中。
  • @Autowired 私有 ObjectMapper 映射器;然后 JsonNode tes = mapper.valueToTree(result);仍然为空
【解决方案2】:
DefaultSerializerProvider.Impl sp = new DefaultSerializerProvider.Impl();
sp.setNullValueSerializer(new NullSerializer());
new ObjectMapper().setSerializerProvider(sp)...

在哪里

public class NullSerializer extends JsonSerializer<Object> {
    @Override
    public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeString("");
    }
}

【讨论】:

    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2013-11-24
    • 2015-04-05
    相关资源
    最近更新 更多