【发布时间】:2021-01-08 19:09:02
【问题描述】:
我有一个包含以下属性的 POJO
public class Example {
@JsonProperty("inputFoo")
private String foo
@JsonProperty("inputBar")
private String bar
@JsonProperty("inputBaz")
@JsonDeserialize(using = MyDeserializer.class)
private Set<String> baz
}
我用来表示此数据的 JSON 当前将 baz 属性表示为单个字符串:
{"inputFoo":"a", "inputBar":"b", "inputBaz":"c"}
我正在使用 Jackson ObjectMapper 尝试将 JSON 转换为我的 POJO。我知道来自 JSON 的输入 baz 字符串不会干净地映射到我试图将其表示为的 Set,因此我定义了一个自定义反序列化器:
public class MyDeserializer extends StdDeserializer<Set<String>> {
public MyDeserializer(){}
public MyDeserializer(Class<?> vc) {
super(vc);
}
public Set<String> deserialize(JsonParser p, DeserializationContext cxt) throws IOException, JsonProcessingException {
String input = p.readValueAs(String.class);
Set<String> output = new HashSet<>();
if(input != null) {
output.add(input);
}
return output;
}
}
我收到一个引用“inputBaz”属性的 IllegalArgumentException,我可以提供有关该属性的详细信息。有没有人看到我的反序列化器实现有任何明显的问题?谢谢
【问题讨论】:
-
你试过摆脱那些构造函数了吗?
public class MyD extends StdDeser...{public Set<String> deserialize(...) throws ... {...}} -
你可以试试
StringDeserializer.instance.deserialize(jp, dc)