实际上,这是可能的。
Jackson 会将类编组/解组为 JSON,只要它可以解析它,另一端就不会注意到它是哪个类。
但是您的代码有几个错误:
- 将您的属性设为私有,然后提供 getter/setter 方法。这对于每个 java 类。
- 至少用 @XmlRootElement 注释类,以便杰克逊可以找到它们
- 使用 @Produces 和 @Consumes 注释方法,将它们设置为 JSON
以下代码可以正常工作(为方便起见,我将格式更改为 XML,在 JSON 中应该相同):
测试服务程序:
@Path("/testDifferentClass")
public class TestServlet {
@GET
@Produces(MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_XML)
public ClassA getClassA() {
ClassA classA = new ClassA();
classA.setOne("Hello");
classA.setTwo(new Date());
classA.setThree(1);
return classA;
}
}
A类:
@XmlRootElement(name = "common")
public class ClassA {
private String one;
private Date two;
private int three;
public String getOne() {
return one;
}
//more getters and setters
B类:
@XmlRootElement(name="common")
public class ClassB {
private String one;
private Date two;
public String getOne() {
return one;
}
//more getters and setters
测试不同:
public void test() {
Client client = Client.create();
WebResource scResource = client.resource("http://localhost:8080/services/testDifferentClass");
ClassB result = scResource.type(MediaType.APPLICATION_XML).accept(MediaType.APPLICATION_XML).get(ClassB.class);
System.out.println(result.getOne());
System.out.println(result.getTwo());
}
输出是 Hello 和今天的日期