【发布时间】:2018-04-18 13:45:07
【问题描述】:
是否可以只反序列化接口中的字段
public interface B {
String getB();
}
public interface A {
String getA();
}
public class Impl implements A, B {
@Override
public String getA() {
return "stringA";
}
@Override
public String getB() {
return "stringB";
}
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
A implA = new Impl();
B implB = new Impl();
String jsonA = null;
String jsonB = null;
try {
jsonA = mapper.writeValueAsString(implA);
jsonB = mapper.writeValueAsString(implB);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
System.out.println(jsonA);
System.out.println();
System.out.println(jsonB);
}
}
我的预期是
接口A
{"a":"stringA"}
接口 B
{"b":"stringB"}
我得到的是
{"a":"stringA","b":"stringB"}
{"a":"stringA","b":"stringB"}
一个接口可以用这个注解 @JsonSerialize(as=A.class),但它只适用于第一个接口。 @JsonSerialize 的输出是
{"a":"stringA"}
{"a":"stringA"}
【问题讨论】:
-
我怀疑您的要求没有解决方案。即使使用自定义序列化程序,您也可以使用
A、B或Impl对JsonSerializer进行参数化,并且在任何情况下,由于writeValueAsString不采用JsonSerializer作为参数,因此您的代码不会不知道如何处理给定的Impl实例。 -
@ApfelPresse ...我已经更新了我的答案以给出一个工作示例。
-
编写两个自定义 Jackson 序列化程序类。一个用于接口 A,一个用于接口 B。