実際、それは可能です。
Jackson はクラスを JSON にマーシャリング/アンマーシャリングしますが、相手側はそれを解析できる限り、それがどのクラスであったかを認識しません。
しかし、あなたのコードにはいくつかのエラーがあります:
- 属性を非公開にしてから、getter/setter メソッドを提供します。これは、すべての Java クラスに適用されます。
- 少なくとも @XmlRootElement でクラスに注釈を付けて、Jackson がそれらを見つけられるようにします。
- @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
TestDifferent:
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 と今日の日付です