[英]Jersey server, rest api : How to remove the code and type from the response body?
我正在嘗試根據swagger生成的基本代碼使用Jax-rs Jersey創建Rest Api。
規范是針對特定請求的示例:代碼:200說明:登錄用戶令牌架構:字符串
我的問題是,生成的代碼使用了:javax.ws.rs.core.Response類,該類不應根據文檔進行擴展。
我正在使用這種代碼來構建響應:
return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK,apiToken)).build();
生成的響應如下所示:
{"code":4,"type":"ok","message":"uHN2cE7REfZz1pD17ITa"}
當我只想在體內擁有:“ uHN2cE7REfZz1pD17ITa”時。 使用Jersey可以嗎? 還是這種格式是jax-rs規范的一部分?
謝謝。
Swagger的ApiResponseMessage
不會擴展JAX-RS的Response
。 檢查代碼 ,您將看到ApiResponseMessage
只是一個POJO。 也就是說,您在問題中發布的代碼段就可以了。
如果只需要令牌,則可以使用:
return Response.ok(apiToken).build();
以下給出了相同的結果:
return Response.ok().entity(apiToken).build();
由於您的資源方法將只生成一段文本(除非將一段文本用引號引起來,否則它不是有效的JSON),因此,最適合響應的媒體類型將是text/plain
。 可以通過使用@Produces(MediaType.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;
}
對於文本,json,xml或html模式而言,JAX-RS不需要特定格式的請求或響應。 但是它們都必須根據其規范進行格式化。
您可以像這樣在運動衫中發送文本回復
return Response.ok().entity("uHN2cE7REfZz1pD17ITa").build();
我是個新手,我不知所措,所以我不知道所討論的響應是否可以更改。 但是從球衣方面沒有限制
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.