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

用于Spring Boot REST API版本控制的自定义头方法

梁丘伟
2023-03-14

我希望实现版本化的REST API与Spring Boot和Swagger使用自定义头。我浏览了下面的许多链接。

@ApiOperation(value = "Find Employees", nickname = "Find Employees")
@ApiResponses(value = { @ApiResponse(code = 200, message = "For Success as well as No Data found scenerio."),
        @ApiResponse(code = 500, message = "Internal Server Error") })
@GetMapping(value = "/employees", headers = {"X-API-VERSION=v1"})
public ResponseEntity<List<Employee>> findEmployees() {
    List<Employee> EmployeeList= employeeservice.findAllEmployees();
    return new ResponseEntity<List<Employee>>(EmployeeList,HttpStatus.OK);
}
@Configuration
@EnableSwagger2
public class SwaggerConfig{
    @Bean
    public Docket api() {
        ParameterBuilder aParameterBuilder = new ParameterBuilder();
        aParameterBuilder.name("X-API-VERSION=v1").modelRef(new ModelRef("string")).parameterType("header").required(true).build();
        List<Parameter> operationParameters = new ArrayList<>();
        operationParameters.add(aParameterBuilder.build());

        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot")))
                .apis(RequestHandlerSelectors.basePackage("com.example"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo())
                .useDefaultResponseMessages(false)
                .globalOperationParameters(operationParameters)
                .globalResponseMessage(
                        RequestMethod.GET,
                        newArrayList(new ResponseMessageBuilder().code(500).message("").build()));
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("API Management")
                .description("Sample Description")
                .termsOfServiceUrl("https://www.test.com")
                .version("0.1")
                .build();
    }
}

共有1个答案

笪俊迈
2023-03-14

这就是这种方法的工作原理。

@RestController
public class TestController {


    @RequestMapping(value = "/user")
    public String getUserDefault() {
        return "getUserDefault";
    }

    @RequestMapping(value = "/user", headers = {"X-API-VERSION=v1"})
    public String getUserV1() {
        return "getUserV1";
    }

    @RequestMapping(value = "/user", headers = {"X-API-VERSION=v2"})
    public String getUserV2() {
        return "getUserV2";
    }

}

另外,您可以使用getmapping而不是requestmapping,让我们使用curl来测试它:

curl --location --request GET 'http://localhost:8080/user' --header 'X-API-VERSION: v2'

return 200 getUserV2

curl --location --request GET 'http://localhost:8080/user' --header 'X-API-VERSION: v1'

return 200 getUserV1

curl --location --request GET 'http://localhost:8080/user'

return 200 getUserDefault
 类似资料:
  • 什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 在本书所展示的例子中,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。 如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就

  • 问题内容: 我已经开发了一个客户维护应用程序。用户可以通过Web界面更改客户详细信息。我想处理以下情况: 加载详细信息。 加载详细信息。 更改并保存的。 只改变并保存年龄。 在上述情况下,最终数据库保留了旧名称和新年龄,因为覆盖了更新。我正在使用Hibernate。我听说Hibernate自动版本控制支持此功能。如果有人知道如何处理,请告诉我。 问题答案: 您只需要添加一个带有注释的字段: 阅读此

  • Unix was not designed to stop you from doing stupid things, because that would also stop you from doing clever things. — Doug Gwyn 你曾经遇到过误删除了某些文件而又希望恢复的情形吧? 本书中提及的最重要的技巧就是将 Puppet 的 配置清单(manifests)纳入像

  • 本章提供了网络 API 的版本控制指南。由于一个 API 服务可能提供多个 API 接口),因此 API 版本控制策略适用于API 接口级别,而不适用于 API 服务)级别。 为了方便起见,术语 API 指的是以下各节中的 API 接口。 网络API应该使用语义化的版本。比如给定版本号 MAJOR.MINOR.PATCH: 当做出不兼容修改的时候,修改 MAJOR 版本号 当以向后兼容的方式添加功

  • 你要为项目做版本控制,学会为项目做版本控制,是开发者的必备技能。用的工具叫 git。 git git 是一种版本控制工具,工具的使用只是一个熟练过程。 https://git-scm.com/ 安装 可以在 git 官网下载适合自己操作系统上用的 git 。也可以使用系统包管理去安装 git,Windows 如果下载了完整版的 cmder ,里面已经包含了 git 。 Windows Window

  • 版本控制 版本管理涉及团队协作,产品质量,和产品上线。使用版本控制工具可使我们自由的做的一些几点: 回退到任意版本 查看历史版本 对比两个版本差异 版本控制系统 版本控制系统(Version Control System)是一种记录若干文件修订记录的系统,它可以帮助开发者查阅或回档至某个历史版本。 手动版本控制 LVCS 本地 CVCS 集中式(例如 SVN) DVCS 分布式(例如 Git) 手