繁体   English   中英

通过REST客户端(例如邮递员)将参数传递给dropwizard(Jersey)资源?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM