Dropwizard - jax-rs使用字符串作为实体的响应正在返回预期的' u'而不是'而不是'

时间:2017-02-21 13:08:17

标签: java jax-rs dropwizard

我的代码中有以下端点:

@GET
@UnitOfWork
@Timed
@Path("/create")
public Response register(@QueryParam("name") String name,
                         @QueryParam("password") String password) {

    // Bcrypt encryption for password
    String encr = enc.encrypt(password);

    // Create a new user object to use with DAO.
    User newUser = new User(name, encr);

    // Save the user to the database and return a string which represents the ID.
    String res = "newID : " + _userDAO.createUser(newUser);

    // Return the string inside a response.
    return Response.status(201).entity(res).build();
}

Bcrypt工作,用户确实被添加到数据库中 - 我还在" res"中获得了有效的ID。串。我假设这个错误要么是res字符串的格式,要么是我如何构建响应 - 但是当我通过rest客户端调用它时,我仍然得到以下结果:

Expected 'u' instead of 'e'

有时u和e字符会改变,但错误的要点是相同的。

这个类被注释为生成JSON - 可能与此有关吗?

感谢所有帮助

1 个答案:

答案 0 :(得分:0)

在你的行

return Response.status(201).entity(res).build();

将响应的实体设置为String(因为“res”是String)。 你的String是“newID:< ...>”。您正在构建格式错误的json字符串,因为缺少json括号。正确的是“{newID:< ...>}”

但是你不应该自己构建你的json字符串。 Dropwizard应该为你做这件事。

您需要将“res”放入对象中。像这样:

public class RegistrationResponse {
    public int newID;

    public RegistrationResponse(int newID) {
      this.newID = newID;
    }
}

@GET
@UnitOfWork
@Timed
@Path("/create")
public RegistrationResponse register(@QueryParam("name") String name,
                     @QueryParam("password") String password) {

  String encr = enc.encrypt(password);

  User newUser = new User(name, encr);

  int newID = _userDAO.createUser(newUser);

  return new RegistrationResponse(newID);
}