Jersey服务器,rest api:如何从响应体中删除代码和类型?

时间:2017-03-20 11:13:08

标签: java rest jersey jax-rs swagger

我试图使用由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规范的一部分吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

来自Swagger的

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();

我是个新人,自言自语所以我不知道有关的回答是否可以改变。但是球衣方没有限制