【问题标题】:JAX-RS Post method with multiple parameters具有多个参数的 JAX-RS Post 方法
【发布时间】:2016-04-04 06:21:30
【问题描述】:

我想使用 jersey 实现来制作 JAX-RS Web 服务。 我需要一个带有 3 个参数的 post 方法。

@POST
@Path ("/addData")
@produce(MediaType.Application_Json)
@Consume(MediaType.Application_JSON)
public User addData(int id, String name, String pass){
    User u = new User();
    u.setId(id);
    u.setName(name);
    u.setPass(pass);
    return u;
}

@POST
@Path ("/addData")
@produce(MediaType.Application_Json)
@Consume(MediaType.Application_JSON)
public User addSingleData(int id){
    User u = new User();
    u.setId(id);
    return u;
}

有一个单独的用户类如下:

public class User{
    int id;
    String name;
    String pass;

    // here are the getter setter and constructors

}

首先,我可以使用 jersey-media-moxy-2.3.jar 文件转换为 JSON(我不想使用 maven)。因为这个 jar 文件没有将内容转换为 json,但是如果我使用 maven,它可以在 post 方法中没有参数的情况下正常工作。

其次,如果我只使用一个参数,如何在方法体中获取参数。即第二种方法

三、post方法中如何使用多个参数。

第四,进一步我需要上传和下载图像。如何做到这一点。

最后,我无法获取 json 格式的数据。

注意:我正在为 android 手机制作网络服务。我将通过 andorid 使用它。

【问题讨论】:

标签: java android json jersey jax-rs


【解决方案1】:

对于 RESTful API,你不应该依赖通常的 Web 应用程序参数传递方式,

... URL..?param=value

你应该以一种访问资源的方式形成一个 url:

例如:

@POST
@Path("/{courseId}/subjects/{"subjectId"}/description")
public Message get(@PathParam("courseId") String courseId, 
                   @PathParam("subjectId") String subjectId) {
  // .... 
}

此资源端点提供了一种在特定课程下发布特定主题的新描述的方法。这就是您可以在同一个 Post 请求中访问多个 Path 参数的方式。

另一方面,如果您正在讨论如何获取“用户”类上所有字段的值,那么您应该考虑使用 @XmlRootElement 注释该类

@XmlRootElement
public class User{
    int id;
    String name;
    String pass;

   //empty contractors is mandatory in addition to the public getter and 
   // setters
   public User(){
   }

   // here are the getter setter and constructors

}

现在,如果您使用 POST 方法发送如下内容:[JSON 格式]:

{
    "id":"123"
    "name":"user name"
    "pass":"pass"      
}

jersey 将使用请求正文中的数据创建 User 类的实例。这就是为什么您需要在 User 类中强制使用空构造函数的原因,jersey 将首先使用空构造函数创建类的实例,并调用每个字段的 setter 来设置值。

有了这个,如果你简单地将 User 放在你的方法的参数中,你就会将对象传递给你的方法。

@POST
@Path ("/addData")
@produce(MediaType.Application_Json)
@Consume(MediaType.Application_JSON)
public User addData(User newUser){
  //do something
  return newUser;
}

【讨论】:

  • 如何在一个方法中传递两个参数?以及您给出的第一个示例,我如何在 post 方法中传递 url 中的参数?我想如果我在 url 中传递用户名和密码之类的东西是错误的。
  • @Sarvesh - 当然你不应该添加密码作为你的 REST URI 路径参数。那没有意义。这就是为什么我举了一个不同的例子。如果要在正文中传递数据,可以使用第二个示例。你的问题不够具体,所以我给出了两个答案。
  • 我可以在 post 方法中有多个参数吗?另外为了将java转换为json,maven提供了jarsey-media-moxy的依赖,但是如果我添加它的jar文件,它就不起作用
  • 是的,您可以传递多个参数。看看我如何重写您的用户,即 jersy 自动将 POST 方法主体中的输入转换为 pojo。 jersy 进行双向转换。 java 对象到 JSON/XML 或反之亦然。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多