2017-02-21 60 views
0

У меня есть следующая конечная точка в моем коде:Dropwizard - JAX-RS Response со строкой в ​​качестве объекта возвращает ожидаемые «и» вместо «х»

@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». Эта ошибка, я бы предположить, либо с форматированием строки Реза, или в том, как я строй ответа - но я получаю следующий результат, когда я называю это с помощью отдыха клиента:

Expected 'u' instead of 'e' 

Иногда и- и символы e будут меняться, но основная точка ошибки будет одинаковой.

Этот класс аннотирован для производства JSON - может быть, это как-то связано с этим?

Вся помощь ценится

ответ

0

в вашей линии

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

установить сущность ответа быть 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); 
} 
+0

Thankyou! Я знал, что мне не хватает чего-то глупого! – MickeyThreeSheds