具有多个参数的 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;
}
我想使用球衣实现制作 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;
}