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

如何用Jackson ObjectMapper将非基本类型字段序列化为字符串?

问题解答

是的,你确实需要自定义序列化器和反序列化器来实现这个需求。Jackson默认会将嵌套对象序列化为嵌套的JSON结构,目前没有现成的注解可以直接把对象序列化为它的JSON字符串表示,也没法直接把JSON字符串反序列回对象。

具体实现步骤

1. 自定义序列化器

这个序列化器会把SomeType2实例先序列化为JSON字符串,再以字符串形式写入最终的JSON结果:

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

public class SomeType2ToStringSerializer extends JsonSerializer<SomeType2> {
    @Override
    public void serialize(SomeType2 value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        String jsonStr = serializers.getMapper().writeValueAsString(value);
        gen.writeString(jsonStr);
    }
}

2. 给目标字段添加序列化注解

在SomeType1的d字段上标注@JsonSerialize,指定使用上面的自定义序列化器:

class SomeType1 {
    public String c;
    @JsonSerialize(using = SomeType2ToStringSerializer.class)
    public SomeType2 d;
}

3. 自定义反序列化器(如果需要反序列化)

如果还要把JSON字符串反序列回SomeType2实例,需要实现对应的反序列化器:

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;

public class StringToSomeType2Deserializer extends JsonDeserializer<SomeType2> {
    @Override
    public SomeType2 deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        String jsonStr = p.getText();
        return ctxt.getMapper().readValue(jsonStr, SomeType2.class);
    }
}

4. 给目标字段添加反序列化注解

同样在SomeType1的d字段上添加@JsonDeserialize注解:

class SomeType1 {
    public String c;
    @JsonSerialize(using = SomeType2ToStringSerializer.class)
    @JsonDeserialize(using = StringToSomeType2Deserializer.class)
    public SomeType2 d;
}

这样处理后,执行objectMapper.writeValueAsString(value)就能得到你期望的JSON结果,反序列化时也能正常将字符串转回SomeType2对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:42:48