我有一些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
以使其按照我的要求工作?
mapper.convertValue(myClass, new TypeReference<Map<String, Object>>(){});
。 - IanGabes