2017-03-20 53 views
0

我想從swagger生成的基本代碼中使用Jax-rs Jersey創建一個Rest Api。澤西島服務器,休息api:如何從響應主體中刪除代碼和類型?

的規格僅供爲例特定請求: 代碼:200 說明:用戶令牌登錄 模式:字符串

我的問題是,生成的代碼使用類:javax.ws.rs。 core.Response不應該根據文檔擴展。

我用這樣的代碼來構建響應:

return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK,apiToken)).build(); 

產生的響應看起來像這樣:

{"code":4,"type":"ok","message":"uHN2cE7REfZz1pD17ITa"} 

當我只希望有:「uHN2cE7REfZz1pD17ITa」在身體。這有可能使用澤西島嗎?或者這種格式是jax-rs規範的一部分?

謝謝。

回答

0

ApiResponseMessage來自Swagger不延伸從JAX-RS的Response。檢查code,你會發現ApiResponseMessage只是一個POJO。也就是說,你在問題中發佈的代碼很好。

如果你只需要令牌,你可以使用:

return Response.ok(apiToken).build(); 

下面爲您提供了相同的結果:

return Response.ok().entity(apiToken).build(); 

因爲你的資源的方法會產生只是一段文字(不一個有效的JSON,除非這段文字被引用到引號中),那麼最適合的響應媒體類型是text/plain

@GET 
@Produces(MediaType.TEXT_PLAIN) 
public Response getToken() { 
    String apiToken = ... 
    return Response.ok(apiToken).build(); 
} 
@GET 
public Response getToken() { 
    String apiToken = ... 
    return Response.ok(apiToken, MediaType.TEXT_PLAIN).build(); 
} 

或者,你也可以讓你的方法只返回一個String

@GET 
@Produces(MediaType.TEXT_PLAIN) 
public String getToken() { 
    String apiToken = ... 
    return apiToken; 
} 
這既可以由標註資源法 @Produces(MediaType.TEXT_PLAIN)或設置媒體類型的響應,如以下操作來實現
+0

好的非常感謝你。 – bloub

0

JAX-RS不需要特定格式的文本,json,xml或html格式的請求或響應。但是他們都必須根據他們的規格進行良好的合成。

您可以發送文本響應這樣的球衣 這樣

return Response.ok().entity("uHN2cE7REfZz1pD17ITa").build(); 

我是新來招搖自己,所以我不知道,如果有問題的響應可以改變與否。但沒有球衣方面的限制