Springfox ломает Hateoas PagedModel - PullRequest
0 голосов
/ 25 мая 2020

Я использую Hateoas в своем Java Spring Service какое-то время, и он всегда работал без проблем.

Теперь я добавил Swagger с Springfox, и 90% все еще работает правильно, но по какой-то причине PagedModel сериализован неправильно.

Перед использованием springfox он был правильно возвращен в API как:

{
  _embedded: {
    collectionLabel: [
      .... models ...
    ]
 },
 page: {
  totalElements: ,
  ...
 },
 _links: {
   self: ...,
   next: ...
   prev: ...
 }
}

, но теперь это выглядит так:

{
  content: [
      .... models ...
  ],
 page: {
  totalElements: ,
  ...
 },
 links: {
   self: ...,
   next: ...
   prev: ...
 }
}

Итак, это ссылки вместо _links и контент вместо _embedded.collectionLabel

Все другие модели, расширяющие ResourceSupport, работают правильно даже в pagedModel, но эти два поля в PagedModel не сериализованы правильно.

Это мой Конфигурация springfox:

@Configuration
@EnableSwagger2
public class SpringFoxConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }

    @Bean
    public LinkDiscoverers discoverers() {
        List<LinkDiscoverer> plugins = new ArrayList<>();
        plugins.add(new CollectionJsonLinkDiscoverer());
        return new LinkDiscoverers(SimplePluginRegistry.create(plugins));

    }

}

Это зависимости:

  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

...

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-hateoas</artifactId>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>

Контроллер:

@RestController
@RequestMapping(path = "/{slug}/v1/webhooks", produces = MediaTypes.HAL_JSON_VALUE)
....
@GetMapping
    public PagedModel<WebhookModel> getAll(Pageable pageable,
                                           PagedResourcesAssembler<Webhook> pagedResourcesAssembler){
        return pagedResourcesAssembler.toModel(
                webhookService.getAll(pageable),
                webhookModelAssembler
        );
    }
...