首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jersey对象映射

Jersey对象映射
EN

Stack Overflow用户
提问于 2012-07-18 21:16:24
回答 2查看 1.9K关注 0票数 2

我想使用Jersey获得一个带有REST调用的Java对象。问题:如果A有所有B的成员,我可以发送A类的对象和接收B类的对象吗?

让我举个例子:

代码语言:javascript
复制
 class A {
    String one;
    Date two;
    int three;
 }

 class B {
    Date two;
    int three;
 }

假设我有一个REST服务:

代码语言:javascript
复制
class MyREST {

  @GET
  @Path("somepath")
  public void getThing() {
     return new A();
{

我用一个代码来调用它:

代码语言:javascript
复制
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);    
EN

回答 2

Stack Overflow用户

发布于 2012-07-19 00:01:03

实际上,这是可能的。

Jackson会将这个类编组/解组为JSON,另一端不会注意到它是哪个类,只要它能解析它。

但是你的代码有几个错误:

  • 将您的属性设置为私有,然后提供getter/setter方法。这样,对于每个java生产,至少使用@XmlRootElement的类,这样Jackson就可以找到它们,并使用@ class.
  • Annotate和@
  • 注释方法,将它们设置为JSON

下面的代码运行良好(为方便起见,我将格式改为XML,它在JSON中应该是相同的):

TestServlet:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
@XmlRootElement(name="common")
public class ClassB {

    private String one;
    private Date two;

    public String getOne() {
        return one;
    }
//more getters and setters

TestDifferent:

代码语言:javascript
复制
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和今天的日期

票数 2
EN

Stack Overflow用户

发布于 2012-07-18 21:30:54

如果你的A类与B类有任何关系,或者B类与A类有关系,这是可能的。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11542315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档