繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM