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

为HttpServletRequest使用Swager文档

赫连心思
2023-03-14

我是新来的swagger和使用它的留档。我目前正在尝试使用swagger来显示PATCH请求的请求体。以前,PATCH方法的参数是正在更新的对象的DTO,这使得显示对象的属性变得非常容易(因为我正在使用SpringBoot,并使用@架构完美地工作)。然而,现在PATCH方法的参数是一个HttpServlet请求。我不想在swagger doc中显示HttpServlet请求(这似乎是自动发生的),而是想显示DTO的属性(就像以前做的那样)。我想知道是否有办法做到这一点?

任何建议都非常感谢!

共有3个答案

刘升
2023-03-14

如何在swagger文档中显示HttpServletRequest?

您可以在配置中设置swagger2,SwaggerConfig.java

new Docket(DocumentationType.SWAGGER_2)
                ...
                .ignoredParameterTypes(HttpSession.class, HttpServletRequest.class, HttpServletResponse.class)
                .build();
夏志国
2023-03-14

上面的答案不起作用,因为向方法添加另一个参数会破坏方法本身的功能。

有效的解决方案是在控制器中将内容参数添加到@审视体注释中:

@RequestBody(description = "Description.", 
           content = @Content(schema = @Schema(implementation = ObjectDTO.class)));
管玉堂
2023-03-14

我假设你正在使用springdoc-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>

从springdoc-openapi的v1.1.25开始,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的模型类如下,它可以描述您的用户名和密码等示例值。

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;

}

最后大摇大摆的页面看起来像这样,

当您在授权标头中输入内容时,如下所示,

这可以通过下面的代码通过HTTP servlet请求访问,

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
 类似资料:
  • 问题内容: 我正在处理遗留代码,需要打补丁。 问题:古老的应用程序发送了错误的HTTP POST请求。参数之一不是URL编码。我知道这个参数总是排在最后,我知道它的名字。我现在正试图在运行在Tomcat中的服务器端修复它。 由于参数格式错误,因此无法通过HttpServletRequest的标准getParameter方法访问此参数。方法仅返回null。但是当我通过ServletInputStre

  • 我有一个简单的应用程序,它将公开一个名为的RESTFul GETendpoint,它将简单地从DB中的device表返回所有设备的提取数据列表。 对于每个请求,我通过验证方法来验证用户身份。为了加速这个过程,我使用了parallelStream和lambda表达式。 在ParallelStream中,我调用了另一个名为的方法,在该方法中,我正在进行身份验证并从DB中提取数据。 问题是,当并行流进程

  • 我正在使用Swagger为Apache CXF RESTful API生成文档。我有 xsd 并且 DTO 是使用 xjc 插件从 xsd 生成的。我希望 swagger 在 swagger 的响应类 - 模型部分下显示 xsd 中每个元素的文档。 我无法控制生成的DTO,因为它是跨多个项目共享的。我不能像某些示例中建议的那样使用swagger注释来注释DTO对象。

  • 问题内容: 我有这段代码,可以从请求输入流中读取输入,并使用JacksonMapper转换为POJO。它在带有guice支持的码头7集装箱中运行。 但是,有时在负载下会引发以下异常。我已经检查了我的客户端,并且确定它发送了一个有效的json字符串。怎么了?负载下Jetty 7的预期行为吗? 问题答案: 如果它已经被预先消耗,它将为空。这将隐式进行,每当你打电话,,,,等上。确保不要调用任何一种方法

  • 问题内容: 我知道我可以用来获取URL参数值。 是否可以使用等效方法设置/替换值? 问题答案: 不,那里没有。 您只能更改属性,不能更改参数。 实现类似目的的唯一方法是包装请求(使用为getParameter返回其他内容的类)。 相关的好奇心:一些servlet容器中有一个错误会让您这样做,但这只会导致不一致。

  • 我想从请求和响应中获得XML数据,并将其用于Rest控制器。我试过这个: 但我得到 将内容转换成字符串变量的正确方法是什么?