如何配置Jackson ObjectMapper让FooBar序列化时调用toString()
自定义类型FooBar的Jackson序列化配置(调用toString())
你可以直接通过JsonMapper.Builder配置ObjectMapper,指定FooBar类使用ToStringSerializer来实现序列化时调用toString()方法,无需修改FooBar类或创建专用工厂类。
具体配置代码
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.databind.json.JsonMapper; // 构建配置好的ObjectMapper JsonMapper objectMapper = JsonMapper.builder() .serializerFor(FooBar.class, ToStringSerializer.instance()) .build();
原理说明
ToStringSerializer是Jackson提供的标准序列化器,核心逻辑就是调用目标对象的toString()方法,将返回值作为JSON的字符串内容输出。- 通过
serializerFor方法为FooBar类绑定这个序列化器后,Jackson在序列化任何FooBar实例时,都会自动使用该序列化器,无需在FooBar的toString()方法上添加@JsonValue注解。
注意事项
- 若使用Jackson 2.13以下版本,需用
addSerializer()方法替代serializerFor(),写法如下:JsonMapper objectMapper = JsonMapper.builder() .addSerializer(FooBar.class, ToStringSerializer.instance()) .build(); - 如果
FooBar的toString()返回结构化JSON字符串(比如"{\"name\":\"test\"}"),Jackson会将其作为普通字符串包裹双引号输出;若想直接解析为JSON对象,需额外配置,但这不符合调用toString()的原始需求。
内容的提问来源于stack exchange,提问作者Garret Wilson
相关产品推荐
相关产品推荐

