【问题标题】:Jersey server, rest api : How to remove the code and type from the response body?Jersey 服务器,rest api:如何从响应正文中删除代码和类型?
【发布时间】:2025-12-29 15:00:12
【问题描述】:

我正在尝试使用 Jax-rs Jersey 从 swagger 生成的基本代码创建一个 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 规范的一部分?

谢谢。

【问题讨论】:

    标签: java rest jersey jax-rs swagger


    【解决方案1】:

    来自 Swagger 的ApiResponseMessage 没有从 JAX-RS 扩展 Response。检查code 你会发现ApiResponseMessage 只是一个POJO。也就是说,您在问题中发布的那段代码就可以了。

    如果只需要token,可以使用:

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

    【讨论】:

      【解决方案2】:

      JAX-RS 不需要特定格式的请求或响应,用于文本、json、xml 或 html 的架构。但是它们都必须根据它们的规格很好地格式化。

      您可以在球衣中发送这样的文本响应 像这样

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

      我是新来的,所以我不知道是否可以更改相关响应。但是球衣方面没有限制

      【讨论】:

        最近更新 更多