我正在尝试使用 Jackson 的
ObjectMapper
类来序列化一个如下所示的对象:
TreeMap<String, String> mappings = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
但是当对象被序列化时,它最终看起来像这样:
{"mappings": {"key": "value"}}
反序列化时,它会丢失地图不区分大小写的属性。有谁知道如何解决这个问题或可能是一种不区分大小写的映射类,我可以用它来序列化和反序列化?是否有杰克逊映射器属性可以用来解决此问题?
这是一些示例代码:
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) throws JsonProcessingException {
TreeMap<String, String> mappings = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
mappings.put("Test3", "3");
mappings.put("test1", "1");
mappings.put("Test2", "2");
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(mappings);
System.out.println(json);
TreeMap<String, String> deserMappings = objectMapper.readValue(json, TreeMap.class);
System.out.println("Deserialized map case insensitive test: " + deserMappings.get("test3"));
}
}
示例输出:
{
"test1" : "1",
"Test2" : "2",
"Test3" : "3"
}
Deserialized map case insensitive test: null
我认为您误解了格式化参数。它描述了一种您想要 ignore case 的情况,这就是它正在做的事情,忽略您拥有以“T”和“t”开头的键值这一事实。它将所有这些都视为同一案例并按顺序排列。对象调用还允许您定义自己的排序比较器。如果你想做一些特别的事情,你可以使用这个。
https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html#TreeMap-java.util.Comparator-