我的代码中有以下端点:
@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 - 可能与此有关吗?
感谢所有帮助
答案 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);
}