首页 文章

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

提问于
浏览
0

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

谢谢 .

2 回答

  • 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;  
    }
    
  • 0

    JAX-RS不需要特定格式的Request或Response for text,json,xml或html . 但是他们都必须根据他们的规格进行良好的格式化 .

    你可以像这样发送像这样的文字回复

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

    我是新手自我摇摆所以我不知道有关的回答是否可以改变 . 但是球衣方没有限制

相关问题