2017-02-21 46 views
0

我已經在我的代碼以下端點:Dropwizard - 用字符串作爲實體JAX-RS響應將返回預期「U」而不是「E」

@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。這個錯誤我會假設要麼是與資源字符串的格式,或者我如何建立反應 - 但我一直得到以下的結果,當我通過其他客戶端調用此:

Expected 'u' instead of 'e' 

有時在U和e字符會改變,但錯誤的主要觀點是相同的。

這個類被註釋爲產生JSON - 也許這與此有關?

所有幫助表示讚賞

回答

0

在你行

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

設置響應的實體是一個字符串(因爲「資源」是一個字符串)。 而你的字符串是「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

謝謝!我知道我錯過了一些愚蠢的東西! – MickeyThreeSheds

相關問題