我想使用泽西实现制作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消费它。
答案 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;
}