有many https://stackoverflow.com/questions/14389198/jackson-mapper-serialize-deserialize-objectid 问题 https://stackoverflow.com/questions/24230526/how-to-serialize-objectid-to-json关于转换自ObjectId
to String
与杰克逊。所有答案都建议创建自己的JsonSerializer<ObjectId>
或注释ObjectId
场与@JsonSerialize(using = ToStringSerializer.class)
.
不过,我有一张地图有时包含ObjectIds
, i.e.:
class Whatever {
private Map<String, Object> parameters = new HashMap<>();
Whatever() {
parameters.put("tom", "Cat");
parameters.put("jerry", new ObjectId());
}
}
我希望杰克逊将其转换为:
{
"parameters": {
"tom": "cat",
"jerry": "57076a6ed1c5d61930a238c5"
}
}
但我得到:
{
"parameters": {
"tom": "cat",
"jerry": {
"date": 1460103790000,
"machineIdentifier": 13747670,
"processIdentifier": 6448,
"counter": 10631365,
"time": 1460103790000,
"timestamp": 1460103790,
"timeSecond": 1460103790
}
}
}
我已经注册了转换(在春季)
public class WebappConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder
.serializerByType(ObjectId.class, new ToStringSerializer());
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(builder.build());
converters.add(converter);
}
}
还有第一级ObjectIds
已正确转换。如何让杰克逊也转换嵌套的?我必须为此地图编写自定义转换器吗?
请记住,这Map
可以嵌套多次(即包含另一个地图)。我只想转换ObjectId
to String
每当杰克逊看到它时。