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

在Spring hateoas中自定义json输出

晋坚
2023-03-14

我正在构建基于spring(spring-boot)的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)

共有2个答案

狄珂
2023-03-14

您需要编写一个自定义序列化程序,将hateoas对象e转换为所需的对象。

查看分页自定义响应的示例:

@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() : "";
    }
}
陆臻
2023-03-14

这里还有一些已知的问题:https://github . com/spring-projects/spring-hate OAS/issues/175

 类似资料:
  • 自定义传输 Nest provides TCP and Redis as a built-in transport methods. It makes prototyping incredibly fast & easy, but sometimes you might want to use another type of transport, e.g. RabbitMQ messaging.

  • 问题内容: 我用来将一些对象作为JSON值返回,并且除了一个字段外,它都工作正常。有没有一种简单的方法可以在一个字段中添加内容而无需手动创建整个json模板? 问题答案: Play使用GSON构建JSON字符串。如果您的字段是一种特定的对象类型,则可以通过为该类型提供自定义的序列化来轻松完成此操作。在这里查看文档 http://sites.google.com/site/gson/gson-use

  • 问题内容: 我的扩展程序具有一个包含项目的上下文菜单。我想要做的是:右键单击html元素(例如,输入或文本区域),然后选择并单击菜单中的某个项目时- 由扩展名定义的某些值将输入到输入中。 目前,我已经意识到。 简单的输入就可以了。 当存在具有自定义事件处理的输入(例如日历或电话输入或货币输入)时,问题就开始了,这些输入以某种方式转换了用户输入。 由于我直接在元素上设置了一个值-省略了处理逻辑,这会

  • 本文向大家介绍Python日志:自定义输出字段 json格式输出方式,包括了Python日志:自定义输出字段 json格式输出方式的使用技巧和注意事项,需要的朋友参考一下 最近有一个需求:将日志以json格式输出, 并且有些字段是logging模块没有的.看了很多源码和资料, 终于搞定, 抽取精华分享出来, 一起成长. 运行结果: 其实就是重写了logging.Filter的filter方法,自定

  • 我有一个POJO类患者,具有以下特征: 现在从我的Rest控制器中,我只需要在json中发送患者的姓名、电话号码、电子邮件和地址。我希望json输出为 此处仅将检查成功/失败添加为标志。

  • 我只是想学习,构建一个Spring HATEOAS应用程序。 我已将自定义查询添加到我的存储库中: 我得到了很好的JSON响应,但由于这是可分页的,我想要一个链接部分。。。使用上一个/下一个。 我该如何添加它? 主url提供了所有客户的列表,链接没有问题,我只想将这些链接添加到自定义可分页方法。 --编辑-- 啊! 使findAllFitered方法返回一个页面而不是列表。。。