老实说我以为我知道怎么做,显然不是。
这是我创建用户的基本资源。
@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向此发送数据时,用户名和密码的值总是为空......我不知道到底发生了什么。< / p>
我将字段“username”和“password”作为原始json发送给请求正文。
我错过了什么吗?
答案 0 :(得分:1)
您必须在查询字符串中发送这些参数,而不是在正文中。例如:
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"
}
确保将Content-Type设置为&#34; application / json&#34;在POST请求上。
答案 1 :(得分:1)
您正在使用@PathParam注释来检索资源函数的输入,但使用Body发送数据。
您需要将用户名和密码作为路径参数发送,如
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.
}