【问题标题】:Spring Boot JSON returned sometime returns a blank string sometimes the null keywordSpring Boot JSON 有时返回空字符串有时返回 null 关键字
【发布时间】:2020-10-07 21:57:47
【问题描述】:

Spring Boot v 2.0.3 根据生成的 JAR 的运行位置,我们可能会得到如下所示的 JSON:

"myField": null

但是在其他系统上运行时可以得到

"myField": ""

我的第一个问题是默认格式应该是什么?我确实得到这两种格式都是有效的。

查看控制器时,数据位于 java 实体类中。很明显 Spring 正在进行格式化。所以我的问题是从哪里开始或尝试什么以获得一致的输出。

我们检查了 java 版本、jackson 版本、操作系统,它发生在 windows 和 linux 上。

谢谢

【问题讨论】:

  • 您运行的是完全相同的 JAR 文件,还是只是从相同的源生成它? “取决于生成 JAR 的位置”你到底在改变什么?
  • 我们正在运行完全相同的 JAR。已经注意到,从昨天开始,问题取决于配置文件的名称 DEV 确实有效 DIF 没有。然后在查看代码时,我会看到代码在哪里查看配置文件,然后执行一些操作。至少快速浏览一下,没有什么真正看起来像问题的根源。你能想到代码中会导致显示 null 或 "" 的任何操作吗?

标签: java spring spring-boot jackson


【解决方案1】:

终于找到了.. 显然有人创建了这个类

@Configuration
public class ObjectMapperConfig implements InitializingBean {

     @Autowired
      private NullSerializer nullSerializer;


      @Autowired
      private MappingJackson2HttpMessageConverter springMvcJacksonConverter;

    @Override
    public void afterPropertiesSet() throws Exception {
        ObjectMapper objectMapper = springMvcJacksonConverter.getObjectMapper();
        DefaultSerializerProvider serializerProvider = new DefaultSerializerProvider.Impl();
        serializerProvider.setNullValueSerializer(nullSerializer);
        objectMapper.setSerializerProvider(serializerProvider);

@Component
public class NullSerializer extends JsonSerializer<Object> {

    @Override
    public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        // TODO Auto-generated method stub

        gen.writeString("");

    }

虽然不明白为什么这些只在一个配置文件中启用。我确定它潜伏在@Profile 注释中。

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多