泽西对象映射

时间:2012-07-18 13:16:24

标签: java json jersey

我想使用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);    

2 个答案:

答案 0 :(得分:2)

实际上,这是可能的。

杰克逊会将课程编组/解组为JSON,而另一端只要可以解析它就不会注意到它是哪一课。

但您的代码有几个错误:

  • 将属性设为私有,然后提供getter / setter方法。这适用于每个java类。
  • 至少使用@XmlRootElement注释类,因此Jackson可以找到它们
  • 使用@Produces和@Consumes将方法设置为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类有关。

但是在你的代码中似乎没有任何关系,所以关系不可能。