[英]jackson serialize class literal
我有一堂課:
package my.package;
public class TreeItem{
...
}
當我想序列化諸如TreeItem.class
之類的文字時,傑克遜將其序列化為:
"class my.package.TreeItem"
我想序列化為
"my.package.TreeItem"
編輯:
public class TreeConfigMap extends HashMap<Class<? extends TreeItem>, Map<String, Object>>{
//empty
}
TreeController :(一個休息控制器)
@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"}}
您可以使用自定義密鑰序列化器。
注釋您的TreeConfigMap以使用自定義密鑰序列化程序
@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());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.