保持相同 URL 但合同在 Spring 中更改 Boot REST 打开 API 3?

Keep same URL but contract changes in Spring Boot REST Open API 3?

我正在使用 Spring Boot and REST and Open API 3 实现。在此示例中,v1 组实现了列表 - 所有数据都将进入列表,在 v2 组中实现了分页 - 所有数据都将以页面的形式出现。

对于消费者,我们不想更改端点 url 让他们消费。

returns 列出的端点。

@GetMapping(value = "/contacts", headers = {"Accept-version=v1"})
public ResponseEntity<List<Contact>> findAll() {
    List<Contact> contacts = contactService.findContactList();
    return new ResponseEntity<>(contacts, HttpStatus.OK);
}

带分页的端点

@GetMapping(value = "/contacts", headers = {"Accept-version=v2"})
public ResponseEntity<List<Contact>> findAll(Pageable pageable) {
    Page<Contact> contactPages = contactService.findContactPageable(pageable);
    return new ResponseEntity<>(contactPages, HttpStatus.OK);
}

我希望 V1 端点显示在 GroupedOpenApi 中,v2 端点显示在 GroupedOpenApi2 中。有什么建议吗?

假设您将两个端点放在不同的包装中,然后使用以下 GroupedOpenApi 定义:

@Bean
public GroupedOpenApi groupOpenApiV1() {
    return GroupedOpenApi.builder()
            .setGroup("v1")
            .packagesToScan("test.org.springdoc.api.v1")
            .build();
}

@Bean
public GroupedOpenApi groupOpenApiV2() {
    return GroupedOpenApi.builder()
            .setGroup("v2")
            .packagesToScan("test.org.springdoc.api.v2")
            .build();
}