java - Jersey 对象映射

标签 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);    

最佳答案

事实上,这是可能的。

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

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

  • 将您的属性设为私有(private),然后提供 getter/setter 方法。对于每个 java 类都是如此。
  • 至少使用 @XmlRootElement 对类进行注释,以便 Jackson 可以找到它们
  • 使用 @Produces 和 @Consumes 注释方法,并将其设置为 JSON

下面的代码工作正常(为了方便,我将格式更改为 XML,它在 JSON 中应该是相同的):

测试Servlet:

@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

测试不同:

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 和今天的日期

关于java - Jersey 对象映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11542315/

相关文章:

java - tomcat 在 html 中显示 404 错误,但 jsp 工作正常

java - Gradle - 从任务附加到系统路径

javascript - 将输入值与数组中的 JSON 对象匹配

python - 将字符串添加到 python 列表 -> json 对象

java - 无法使用 Jersey 客户端过滤器覆盖响应 header

java - JAX-RS 应用子类注入(inject)

java - 如何在java中获取映射中对(键)值的总和?

Java 来自套接字 NIO ByteBuffer 的部分消息处理

json - 从空接口(interface)检索值

json - 在 Jersey RESTful 中隐藏 JSON 字段