我想使用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);
答案 0 :(得分:2)
实际上,这是可能的。
杰克逊会将课程编组/解组为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 setters
ClassB的:
@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和今天的日期
答案 1 :(得分:1)
如果您的A类与B类或B类有任何关系,则可能与A类有关。
但是在你的代码中似乎没有任何关系,所以关系不可能。