Вы можете изменить тип ответа следующим образом:
@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);
}
В этом примере, если токен действителен, API отвечает байтами. В противном случае вы увидите это (как JSON):
{
"code": 403,
"message": "some message"
}
Важно здесь: @ResponseBody
Это на стороне пружинной загрузки, теперь, если вам нужен файл статического сваггера (. 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"