gpt4 book ai didi

java - 如何在 Rest Api 调用中设置多个响应类型

转载 作者:行者123 更新时间:2023-12-01 19:28:13 25 4
gpt4 key购买 nike

我确实有一个 API 调用,其中我必须返回证书的字节格式,并且响应类型为octet/stream。但是,如果发生错误,该错误将出现在 application/JSON 中。如何在 swagger/rest-client 中设置两种响应类型?目前,契约(Contract)是在 swagger 中定义的,我必须在其余客户端中为每个场景手动选择内容类型才能看到响应?

最佳答案

您可以按照此方法修改响应类型:

    @GetMapping("/public/download")
@ResponseBody
public ResponseEntity<Resource> download(HttpServletRequest request) {
if (fixedToken.equals(request.getHeader(HttpHeaders.AUTHORIZATION))) {
Resource file = fileStorageService.loadFileAsResource("fil-name-here", "folder");
return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getFilename() + "\"").body(file);
}

//Your custom response
Map response = new HashMap();
response.put("code", HttpStatus.FORBIDDEN.value());
response.put("message", "some message");

return new ResponseEntity(response, HttpStatus.FORBIDDEN);
}

在此示例中,如果 token 有效,API 将使用字节进行响应。否则,您将看到以下内容(JSON 格式):

{
"code": 403,
"message": "some message"
}

此处重要:@ResponseBody

这是在 spring-boot 方面,现在如果您需要静态 swagger 文件(.yaml),您需要这样的文件:

paths:
/{file_name}:
get:
tags:
- "your app tag"
summary: "Download"
description: "Get file content"
operationId: "operationNameOnSpringBoot"
parameters:
- name: "file_name"
in: "path"
description: "file name"
required: true
schema:
type: "string"
responses:
200:
description: "successful operation"
content:
application/octet-stream:
schema:
type: string
format: binary
404:
description: "Not found"
content:
application/json:
schema:
$ref: "#/components/schemas/your_error_schema"

关于java - 如何在 Rest Api 调用中设置多个响应类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59288154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com