簡體   English   中英

傑克遜序列化類文字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM