当前位置: 首页 > 知识库问答 >
问题:

@带空响应体的ApiResponse(Spring靴)

洪黎昕
2023-03-14

我正在寻找一种方法来告诉斯威格,某个API响应代码没有响应体。例如,一个get响应,可以返回一个200代码,将实际对象作为响应,或者如果与传递的ID关联的对象不存在,则返回一个404:

@ApiResponses(value = {
    @ApiResponse(responseCode = "200", description = "Object found"),
    @ApiResponse(responseCode = "404", description = "Invalid object ID", content = @Content)
})

这是我能想到的最接近的事情,但它并不完美,在404响应的描述下,我仍然得到了一个恼人的“媒体类型”。谢谢

共有3个答案

周宏胜
2023-03-14

您可以在v2中的方法之上使用以下内容

@ApiResponses(value = {
        @ApiResponse(code = 200, message = "Success", response = YourObject.class),
        @ApiResponse(code = 401, message = "Unauthorized"),
        @ApiResponse(code = 403, message="Forbidden"),
        @ApiResponse(code = 404, message = "Not Found"),
        @ApiResponse(code = 500, message = "Failure")
})

对于V3,您可以尝试类似的方法,以防您的方法返回某些对象

@Operation(summary = "Add a new object", description = "", tags = { "yourObject" })
@ApiResponses(value = { 
        @ApiResponse(responseCode = "201", description = "Object created",content = @Content(schema = @Schema(implementation = YourObject.class))), 
        @ApiResponse(responseCode = "400", description = "Invalid input"), 
        @ApiResponse(responseCode = "409", description = "Object already exists") })    
        @PostMapping(value = "/your-url", consumes = {"application/json","application/xml" })
        public ResponseEntity<YourObject> addObject(
            ...
            return ...
        }

如果您的方法返回无效,请尝试此方法

@Operation(summary = "Update an existing object", description = "", tags = { "yourObject" })
@ApiResponses(value = {
        @ApiResponse(responseCode = "200", description = "successful operation"),
        @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
        @ApiResponse(responseCode = "404", description = "Object not found"),
        @ApiResponse(responseCode = "405", description = "Validation exception") })  
        @PutMapping(value = "/your-url/{id}", consumes = { "application/json", "application/xml" })  
        public ResponseEntity<Void> addObject(
            ...
            return ...
        }
甄志
2023-03-14

如果未指定@apisresponse注释的内容属性,则控制器方法的返回类型将是您的响应内容。要防止出现这种情况,请明确定义内容

@ApiResponse(responseCode = "200", description = "OK",
             content = @Content(schema = @Schema(implementation = Void.class)))

或者只需返回ResponseEntity即可

宇文弘懿
2023-03-14

这可能是更好(也更短)的方法:

@ApiResponse(
   responseCode = "404", 
   description = "Not found", 
   content = @Content(schema = @Schema(hidden = true))) 
 类似资料:
  • 我使用的是Rest模板,也使用了Web客户端。我得到钥匙作为回应,但身体总是空的。使用Postman,我可以看到响应,这是一个JSON。 我的代码片段在下面- 回应如下- {“结果”:[]} 有人面临同样的问题吗? 在《邮差》中,我能看到的回复头是- 键值 内容编码gzip 内容类型的应用程序/JSON;charset=utf-8 传输编码分块

  • 使用Guzzle,我正在使用JSON格式的一些外部API,通常我获取数据 $data = $request- 但是我无法从这个不同的api中获取数据。数据似乎没有出现在“响应体”中。 这个api调用有效:https://i.ibb.co/80Yk6dx/Screenshot-2.png 这不起作用:https://i.ibb.co/C239ghy/Screenshot-3.png

  • 我使用Spring Rest模板时,我的应用程序中的rest Web服务。在测试中,代码工作得很好,但是在正式生产环境中,我的cpde不工作,因为身体回来是空的 我尝试了以下方法 我在测试中得到的响应如下 在生产过程中,resp是 返回的响应主体为空。我知道nginx版本不同,但这超出了我的控制范围 我们非常感谢你的任何帮助 干杯Damien

  • 最近我开始使用reverfit2,我遇到了一个解析空响应体的问题。我有一个服务器,它只响应http代码,没有任何内容在响应体。 我如何只处理关于服务器响应的元信息(报头、状态代码等)?

  • 我正在尝试调用FlickR API,但由于response.body()返回null而遇到困难。 我不确定它是否与我的JSON/POJO映射相关,但我无法弄清楚当我调用Flickr时如何访问来自改版的响应。我知道我的调用已经成功完成,因为我实际上能够通过日志拦截器查看JSON。 型号: 活动 }

  • 但是我总是在方法中获得响应。因此,我尝试使用查看响应的错误主体。错误正文包含与原始响应完全相同的内容。 我用控制了response,看看我是否修改了我的响应类wright,它似乎可以。 为什么改型无法转换我的响应? 更新