jackson 将JSON值从空值更改为空字符串

5uzkadbs  于 2022-11-08  发布在  其他
关注(0)|答案(3)|浏览(230)

我做了一个rest控制器,它返回json。我从数据库中获取这些数据,使用setter getterMap到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是不好的。

roqulrg3

roqulrg31#

您可以覆盖默认的ObjectMapper(由Sping 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;
    }

}
t9eec4r0

t9eec4r02#

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("");
    }
}
qltillow

qltillow3#

你可以通过处理json字符串更容易地解决这个问题:

jsonString = jsonString.replaceAll("null,", "'',");

相关问题