Использование документации Swagger для HttpServletRequest - PullRequest
0 голосов
/ 13 июля 2020

Я новичок в чванстве и использую его документацию. В настоящее время я пытаюсь использовать swagger для отображения тела запроса PATCH. Раньше параметром метода PATCH был DTO обновляемого объекта, что позволяло очень легко отображать атрибуты объекта (так как я использую SpringBoot, а использование @Schema отлично работало). Однако теперь параметром метода PATCH является HttpServletRequest. Вместо того, чтобы отображать HttpServletRequest в swagger do c (что, кажется, происходит автоматически), я хочу показать атрибуты DTO (как это делалось раньше). Мне было интересно, есть ли способ сделать это?

Любой совет очень важен!

Ответы [ 2 ]

1 голос
/ 15 июля 2020

Приведенный выше ответ не сработал, поскольку добавление еще одного параметра к методу нарушило функциональность самого метода.

Решение, которое сработало, заключалось в контроллере, чтобы добавить параметр содержимого в аннотацию @RequestBody:

@RequestBody(description = "Description.", 
           content = @Content(schema = @Schema(implementation = ObjectDTO.class)));
1 голос
/ 14 июля 2020

Я предполагаю, что вы используете springdo c -openapi для создания SwaggerUI.

Чтобы использовать это, вы можете использовать следующие зависимости Maven,

<dependency>
  <groupId>org.springdoc</groupId>
  <artifactId>springdoc-openapi-ui</artifactId>
  <version>1.4.2</version>
</dependency>
<dependency>
  <groupId>org.springdoc</groupId>
  <artifactId>springdoc-openapi-webmvc-core</artifactId>
  <version>1.4.2</version>
</dependency>

Начиная с версии 1.1.25 из springdo c -openapi, HttpServletRequest и HttpServletResponse будут добавлены в список игнорируемых типов.

См. ниже,

https://github.com/springdoc/springdoc-openapi/issues/57

Поэтому, даже если мы добавим HttpServletRequest в качестве параметра внутри метода контроллера, он будет проигнорирован и не будет отображаться в swagger.

Итак, возвращаясь к вашему вопросу, чтобы отобразить модель класса, вы можете опишите другой параметр вместе с HttpServletRequest, как показано ниже,

@Operation(summary = "Returns a token", description = "Returns A token API", tags = "tokenGeneration", responses = {

            @ApiResponse(description = "Successful Operation", responseCode = "200", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Timeresponse.class))),
            @ApiResponse(description = "not found Operation", responseCode = "404") })
    @PatchMapping("/getTokenPatchRequest")
    public ResponseEntity getTokenpatch(HttpServletRequest request, @RequestBody AuthReq2 req) {

        log.info("The HttpServlet request header contains the information : " + request.getHeader("Authorization"));

Класс модели Auth2, как показано ниже, может описывать ваше примерное значение имени пользователя и паролей et c.

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

@Data
public class AuthReq2 {
    
    @Schema(example = "diannamcallister")
    private String userName;
    
    @Schema(example = "test")
    private String password;

}

И наконец, страница чванства выглядит так:

enter image description here

When you enter something in the authorization header, as below,

введите описание изображения здесь

Доступ к нему можно получить через запрос сервлета HTTP с помощью приведенного ниже кода:

log.info("The HttpServlet request header contains the information : " + request.getHeader("Authorization"));

Запись журнала в приложении springboot будет выглядеть, как показано ниже,

10:40:01.876 INFO   OpenApiController.getTokenpatch:163 - The HttpServlet request header contains the information : stackoverflow
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...