gpt4 book ai didi

java - Jackson 序列化类文字

转载 作者:行者123 更新时间:2023-12-02 04:32:57 25 4
gpt4 key购买 nike

我有一个类:

package my.package;
public class TreeItem{
...
}

当我想序列化像 TreeItem.class 这样的类文字时, jackson 将其序列化为:

"class my.package.TreeItem"  

我想将其序列化为

"my.package.TreeItem"

编辑:

public class TreeConfigMap extends HashMap<Class<? extends TreeItem>, Map<String, Object>>{
//empty
}

TreeController:(休息 Controller )

@RequestMapping("/config")
public TreeConfigMap config(...){
TreeConfigMap config= new TreeConfigMap();
Map<String,Object> m = new HashMap<>();
m.put("ali","gholi");
config.put(TreeItem.class,m);
return config;
}

输出为:

{"class my.package.TreeItem":{"ali":"gholi"}}

最佳答案

您可以使用自定义 key 序列化程序。

注释您的 TreeConfigMap 以使用自定义 key 序列化程序

@JsonSerialize(keyUsing = ClassNameSerializer.class)
public static class TreeConfigMap extends HashMap<Class<? extends TreeItem>, Map<String, Object>>{
//empty
}

或者,您可以使用 ObjectMapper 注册序列化器

    ObjectMapper mapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addKeySerializer(Class.class, new ClassNameSerializer());
mapper.registerModule(simpleModule);
...
mapper.writeValueAsString(treeConfigMap)

这是序列化器代码

public static class ClassNameSerializer extends JsonSerializer<Class> {
@Override
public void serialize(Class value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeFieldName(value.getCanonicalName());
}
}

关于java - Jackson 序列化类文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31218448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com