Я использую 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
);
}