我有一些 Java 类,我想将其转换为Map<String, String>
。问题是我的 java 类的任何字段没有明显的String
表示形式(集合、其他类)应转换为 json 字符串。
这是一个例子:
@Data
@AllArgsConstructor
class MyClass {
String field1;
Long field2;
Set<String> field3;
OtherClass field4;
}
@Data
@AllArgsConstructor
class OtherClass {
String field1;
String field2;
}
ObjectMapper mapper = new ObjectMapper();
MyClass myClass = new MyClass("value",
123L,
Sets.newHashSet("item1", "item2"),
new OtherClass("value1", "value2"));
Map<String, String> converted =
mapper.convertValue(myClass, new TypeReference<Map<String, String>>(){});
在此刻,converted
应如下所示:
"field1" -> "value"
"field2" -> "123"
"field3" -> "[\"item1\", \"item2\"]"
"field4" -> "{\"field1\":\"value1\",\"field2\":\"value2\"}"
相反,调用mapper.convertValue
尝试反序列化 Set 时失败,但有异常java.lang.IllegalArgumentException: Can not deserialize instance of java.lang.String out of START_ARRAY token
.
有什么特殊的配置我可以注释一下MyClass
用或方法来配置ObjectMapper
使这个工作按照我想要的方式进行?