我试图使用由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"在身体里。这可能使用泽西岛吗?或者这种格式是jax-rs规范的一部分吗?
谢谢。
答案 0 :(得分:1)
ApiResponseMessage
不会从JAX-RS扩展Response
。查看code,您会看到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;
}
答案 1 :(得分:0)
JAX-RS不需要特定格式的请求或响应,因为文本,json,xml或html不允许使用模式。但是他们都必须根据他们的规格进行良好的格式化。
您可以在球衣中发送这样的文字回复 像这样
return Response.ok().entity("uHN2cE7REfZz1pD17ITa").build();
我是个新人,自言自语所以我不知道有关的回答是否可以改变。但是球衣方没有限制