【问题标题】:Passing Two Objects in Rest Api using Jersey使用 Jersey 在 Rest Api 中传递两个对象
【发布时间】:2013-10-10 06:46:03
【问题描述】:

我写了一个 Restful Web 服务 API,它接受两个不同的对象,是否可以使用 Jersey 客户端调用这个 api。我无法使用 Jersey 客户端调用它。 这是我们不能将多个对象传递给一个方法的 Rest API 的限制吗?

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/hello")
public class TimePassService {

    @POST
    @Path("/post")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response saveEmployeeInfo(final Employee input,final Manager input1) {
        String result = "Employee saved : " + input;

        System.out.println(input);
        System.out.println(input1);
        return Response.status(201).entity(result).build();
    }

}

当我和一些技术人员讨论时,他们回答说不可能,解决方案是将这两个对象包装成第三个对象,然后传递一个对象。

如果有其他解决方案,请告诉我。

【问题讨论】:

    标签: java rest jersey jersey-client


    【解决方案1】:

    这是不可能的。见the JAX-RS specification:

    3.3.2.1 实体参数

    未使用@FormParam 或3.2 节中列出的任何注释的参数的值称为实体参数,是从请求实体主体映射的。实体主体和 Java 类型之间的转换是实体提供者的职责,参见第 4.2 节。资源方法最多只能有一个实体参数。

    方法'实体参数'只能有一个。

    您要求的不是 RESTful。 REST 不是 RPC(远程过程调用),您不会将对象“传递”给“方法”。在 REST 中,您可以在识别 URL 之间传输资源表示。

    在您的示例中,资源将是 EmployeeInfo 包装 Employee 和 Manager。

    此外,/post 不是一个非常 RESTful 的 URL。什么资源由此标识?如果你GET /post 会发生什么?请用 REST 术语思考,而不是 RPC。

    【讨论】:

      【解决方案2】:

      解决方案是将这两个对象包装成第三个对象,然后传递一个对象。 我想知道客户端发来的字符串json是什么样子的?

      是这样吗:

      [
          employee: {
              "name": "Sury",
              "age": 23
          },
          manager: {
              "name": "Beack",
              "Room": "DC2"
          }
      ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-10
        • 2017-11-23
        • 1970-01-01
        • 2016-12-20
        • 1970-01-01
        相关资源
        最近更新 更多