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

时间:2016-04-04 06:21:31

标签: java android json jersey jax-rs

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

有一个单独的User类如下:

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

1 个答案:

答案 0 :(得分:3)

对于RESTful API,您不应该使用通常的Web应用程序参数传递样式进行中继,

... URL..?param=value

你应该以一种方式形成一个网址,访问资源是有意义的:

例如:

@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;
}