我想使用Jersey获得一个带有REST调用的Java对象。问题:如果A有所有B的成员,我可以发送A类的对象和接收B类的对象吗?
让我举个例子:
class A {
String one;
Date two;
int three;
}
class B {
Date two;
int three;
}假设我有一个REST服务:
class MyREST {
@GET
@Path("somepath")
public void getThing() {
return new A();
{我用一个代码来调用它:
Client client = Client.create();
WebResource scResource = client.resource("somePath");
MyClass result = scResource.type(MediaType.APPLICATION_JSON_TYPE).accept(MediaType.APPLICATION_JSON_TYPE).get(B.class); 发布于 2012-07-19 00:01:03
实际上,这是可能的。
Jackson会将这个类编组/解组为JSON,另一端不会注意到它是哪个类,只要它能解析它。
但是你的代码有几个错误:
。
下面的代码运行良好(为方便起见,我将格式改为XML,它在JSON中应该是相同的):
TestServlet:
@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;
}
}ClassA:
@XmlRootElement(name = "common")
public class ClassA {
private String one;
private Date two;
private int three;
public String getOne() {
return one;
}
//more getters and settersClassB:
@XmlRootElement(name="common")
public class ClassB {
private String one;
private Date two;
public String getOne() {
return one;
}
//more getters and settersTestDifferent:
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和今天的日期
发布于 2012-07-18 21:30:54
如果你的A类与B类有任何关系,或者B类与A类有关系,这是可能的。
但在您的代码中似乎没有任何关系,所以使用关系是不可能的。
https://stackoverflow.com/questions/11542315
复制相似问题