我正在建造基于api的弹簧(弹簧靴)。 是否可以从hateoas库json输出中删除_embedded关键字?我希望我的项目集合显示在_embedded之下。我知道它违反了规范但是我想知道是否有简单的方法来定制输出但仍然使用spring hateoas?如果不可能,我应该使用不同的api构建库,在生成的输出方面允许更大的灵活性,那么你会建议什么?
我的控制器代码:
@RequestMapping(method = RequestMethod.GET, produces = "application/json")
HttpEntity<Resources<Author>> getAllAuthors() {
Resources<Author> resources = new Resources<>(this.authorsService.findAll());
resources.add(this.entityLinks.linkToCollectionResources(Author.class));
return new ResponseEntity<>(resources, HttpStatus.OK)
答案 0 :(得分:0)
答案 1 :(得分:0)
您需要编写一个自定义的序列化程序,该序列化程序将Hateoas对象转换为所需的对象。
请参见分页自定义响应示例:
@Component
public class CustomPageResponseSerializer extends JsonSerializer<Page> {
@Autowired
private PagedResourcesAssembler<Page> pagedResourcesAssembler;
@Override
public void serialize(Page page, JsonGenerator gen, SerializerProvider provider) throws IOException {
PagedModel pageModel = pagedResourcesAssembler.toModel(page);
CustomPageResponse pageResponse = CustomPageResponse.builder()
.data(page.toList())
.page(PaginationDataResponse.builder()
.page(page.getNumber())
.pageSize(page.getSize())
.totalPages(page.getTotalPages())
.totalElements(Math.toIntExact(page.getTotalElements()))
.links(
PaginationLinksResponse.builder()
.first(getLink(pageModel.getLink(IanaLinkRelations.FIRST)))
.last(getLink(pageModel.getLink(IanaLinkRelations.LAST)))
.previous(getLink(pageModel.getPreviousLink()))
.next(getLink(pageModel.getNextLink()))
.build()
)
.build())
.build();
new PaginationObjectMapper().writeValue(gen, pageResponse);
}
private String getLink(Optional link) {
return link.isPresent() ? ((Link)link.get()).getHref() : "";
}
}