You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MapStruct处理JsonNullable字段时无法返回值的问题

问题原因与解决方案

问题原因

核心问题是Jackson无法正确序列化JsonNullable类中的value字段,常见触发场景:

  • Swagger生成的JsonNullable类中,value字段为私有且未添加@JsonProperty注解,同时缺少符合Jackson规范的getter方法(比如getValue()),导致Jackson无法识别该字段。
  • 项目未引入或配置Swagger/Jackson对应的JsonNullable序列化模块,Jackson默认不知道如何处理这个自定义包装类型。

解决方案

1. 检查Swagger生成的JsonNullable类结构

找到自动生成的JsonNullable.java文件,确认:

  • value字段是否添加了@JsonProperty注解:
    @JsonProperty("value")
    private T value;
    
  • 是否存在标准的getter方法:
    public T getValue() {
        return value;
    }
    

如果缺少,可通过调整Swagger Codegen的配置(比如在swagger.yaml中添加序列化相关配置)解决,不建议手动修改生成类(下次生成会覆盖)。

2. 自定义Jackson序列化器

如果无法修改生成的JsonNullable类,可自定义序列化器强制输出value:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;

public class JsonNullableSerializer extends JsonSerializer<JsonNullable<?>> {
    @Override
    public void serialize(JsonNullable<?> value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeStartObject();
        gen.writeBooleanField("present", value.isPresent());
        if (value.isPresent()) {
            gen.writeObjectField("value", value.getValue());
        }
        gen.writeEndObject();
    }
}

注册到ObjectMapper(Spring项目可通过配置类实现):

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        SimpleModule module = new SimpleModule();
        module.addSerializer(JsonNullable.class, new JsonNullableSerializer());
        mapper.registerModule(module);
        return mapper;
    }
}

3. 引入Swagger官方序列化支持

确保项目依赖中包含swagger-core,它自带处理JsonNullable的序列化器,引入后Jackson会自动识别并正确序列化value字段:
Maven依赖示例:

<dependency>
    <groupId>io.swagger.core.v3</groupId>
    <artifactId>swagger-core</artifactId>
    <version>2.2.15</version>
</dependency>

内容的提问来源于stack exchange,提问作者MiKa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:55:03