Как я могу установить несколько типов ответов в вызове RestApi - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть один вызов API, в котором я должен вернуть байтовый формат сертификата, а тип ответа - octet/stream. Однако в случае возникновения ошибки ошибка будет в application/JSON. Как установить оба типа ответа в swagger / rest-client ? На данный момент контракт определен в чванстве, и мне приходится вручную выбирать тип контента в остальных клиентах для каждого из сценариев, чтобы увидеть ответ?

1 Ответ

0 голосов
/ 11 декабря 2019

Вы можете изменить тип ответа следующим образом:

    @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"
...