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

如何用Swagger记录Spring Boot webapp的RestController?

梁丘扬
2023-03-14
@RestController
@Api(description="Querying concepts")
public class KnowledgeModelController {
    private ConceptService conceptService;
    @Autowired
    public KnowledgeModelController(ConceptService conceptService) {
        this.conceptService = conceptService;
    }
    @ApiOperation(value = "Returns a concept identified by its URI, optionally restricted by its branch", response = ConceptService.Concept.class)
    @RequestMapping(value = "/concept", method = RequestMethod.GET)
    public ConceptService.Concept getConcept(Optional<String> branch, String uri) {
        return conceptService.getConcept(branch, uri);
    }
}

这个问题显然可以通过将整个webapp移动到非根上下文路径来解决。但是,我不能走这条路由,因为客户端已经知道并使用它的某些endpoint。

如何让springfox和swagger在这种情况下工作呢?

共有1个答案

龙博
2023-03-14

我找到的解决方案实现了以下策略:

  1. 将新的RestController映射到非根上下文路径/RESTPath。这也将使springfox在/restpath/v2/api-docs处公开其endpoint。
  2. 让所有Swagger资源出现在/restpath下,而不是出现在/,这样从/restpath/swagger-ui.html到/restpath/v2/api-docs的导航就可以工作了。

为了执行第一个操作,我只需向RestController类添加一个@RequestMapping(“/RestPath”)注释。

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        super.addViewControllers(registry);
        registry.addRedirectViewController("/restpath/v2/api-docs", "/v2/api-docs").setKeepQueryParams(true);
        registry.addRedirectViewController("/restpath/swagger-resources/configuration/ui","/swagger-resources/configuration/ui");
        registry.addRedirectViewController("/restpath/swagger-resources/configuration/security","/swagger-resources/configuration/security");
        registry.addRedirectViewController("/restpath/swagger-resources", "/swagger-resources");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/restpath/**").addResourceLocations("classpath:/META-INF/resources/");
    }
}
 类似资料:
  • 我已经将SpringFox依赖项添加到我的Spring Boot项目中,当我打开swagger-ui.html页面时,我可以看到我自己创建的RestControllers的文档,我确实看到了以下文档: 基本错误控制器 默认值 null 如何向default/loginendpoint添加文档?

  • 使用 ORM,我想做一个 POST 请求,让一些具有值的字段,这些字段将在数据库中转换为那里指定的默认值。 问题是OpenAPI(Swagger)文档忽略默认的,并且默认情况下仍然提示。 在我们找到的文档中的OpenAPI模式示例(请求正文)中: 这是不行的,因为我指定默认值为 ,所以我期望这样做: 这会将一个 传递给 ,最后将在数据库中解析为默认值(即新生成的

  • 假设我有一个简单的Java数据类: 注意:在实践中,我使用不可变来生成这个,但是为了简单起见,我在这里显示了一个POJO。 要记录响应的模型,即使返回类型是,我也可以引用中的类: 基于此,斯威格将正确记录以下内容: 型号: 示例值: 为了记录主体的模型,我直接在代码中使用类,Swagger找到它并根据需要记录它: 我也想支持部分更新。我不能使用POJO本身,因为POJO中的所有字段都是强制性的,当

  • 我有一个JAX-RS方法,它采用Map来促进部分更新。 我不能使用补丁,说来话长。我需要记录客户端可以发送哪些参数,以便他们可以在昂首阔步的UI中看到它们。一种方法是使用 这是一个不错的工作。PartialUpdatePerson是一个包含允许发送的各种参数的类。 问题是在swagger UI中,它仍然用地图显示我的身体。样本值为: 以及有效载荷。 有没有,我可以告诉炫耀,不显示这个?即从文档的角

  • 在尝试获取allowableValues标记的枚举值时,我遇到了以下错误。 批注属性apimodelProperty.AllowAbleValues的值必须是常量表达式 我想做的是: 我有可能做我想做的事吗?我知道在我的API中只公开枚举是可能的,然后swagger会自动识别允许的值,但是需要将有问题的字段公开为字符串,即使我们的内部逻辑将其作为枚举。 提前感谢您的帮助!

  • Java16引入了记录,这有助于在编写携带不可变数据的类时减少样板代码。当我尝试将记录用作bean时,我得到以下错误消息: 如何将记录用作?