[英]Passing arguments to a dropwizard (Jersey) resource via a REST client, such as postman?
老实说,我以为我知道该怎么做,显然不是。
这是我创建用户的基本资源。
@POST
@Path("create")
@Timed
@UnitOfWork
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public long createUser(@PathParam("username") String username,
@PathParam("password") String password)
{
User userToCreate = new User();
System.out.println("**********************************************");
System.out.println(username + " " + password);
System.out.println("**********************************************");
userToCreate.setUsername(username);
userToCreate.setPassword(password);
// Save to database.
return userDAO.create(userToCreate);
}
很简单,System.out行仅是为了帮助我调试,它们在工作时将被删除(是的,我也将添加加密!)
无论如何,事实证明,无论我做什么,当通过PostMan向其发送数据时,用户名和密码的值始终为null ...我不知道这到底是怎么回事。
我将字段“ username”和“ password”作为原始json发送,并带有请求的正文。
我想念什么吗?
您必须在查询字符串中而不是在正文中发送这些参数。 例如:
POST http://localhost:8080/create?username=jsmith&password=foobar
另外一个选项:
如果您确实要在正文中发送它,请创建一个对象来保存数据。
public class UserPass {
private String username;
private String password;
public void setUsername(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
}
并更改您的方法签名,如下所示:
public long createUser(UserPass userPass) {
User userToCreate = new User();
System.out.println("**********************************************");
System.out.println(userPass.getUsername() + " " + userPass.getPassword());
System.out.println("**********************************************");
userToCreate.setUsername(userPass.getUsername());
userToCreate.setPassword(userPass.getPassword());
// Save to database.
return userDAO.create(userToCreate);
}
然后使用JSON发布如下内容:
{
"username": "jsmith",
"password": "foobar"
}
确保在POST请求中将Content-Type设置为“ application / json”。
您正在使用@PathParam批注来检索资源功能的输入,但使用正文发送数据。
您需要发送用户名和密码作为路径参数,例如
xyz.com/create/ {用户名} / {密码}
要么
您需要创建一个请求类并将其用作输入参数,以从请求主体获取数据,例如
@Getter
@Setter
public class RegisterRequest{
private String username;
private String password;
}
并像这样使用
@YourAnnotations
public long create(RegisterRequest request){
//Your code for creating user.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.