具有多个参数的 JAX-RS Post 方法

JAX-RS Post method with multiple parameters

我想使用球衣实现制作 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;
}

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

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 消费它。

对于RESTful API,你不应该依赖通常的网络应用程序参数传递风格,

... URL..?param=value

您应该以一种访问资源有意义的方式形成 url:

例如:

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

此资源端点正在为 post 特定课程下特定主题的新描述提供一种方法。这就是您如何在同一个 Post 请求中访问多个 Path 参数。

另一方面,如果您正在谈论如何获取 'User' class 上所有字段的值,那么您应该考虑使用 @XmlRootElement[= 注释 class 15=]

@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 class 的实例。这就是为什么您需要在 User class 中强制使用空构造函数的原因,jersey 将首先使用空构造函数创建 class 的实例,并调用每个字段的 setter 来设置值。

有了它,如果您简单地将 User 放入您的方法的参数中,您就会将对象传递给您的方法。

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