【问题标题】:Spring Data Rest: how to customize the "_links" property representation?Spring Data Rest:如何自定义“_links”属性表示?
【发布时间】:2016-07-25 09:05:02
【问题描述】:

我正在尝试自定义 Spring Data Rest JSON 实体表示的 "_links" 属性中链接的 url。

按照文档“16.5.3. 自定义表示”(参见http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_customizing_the_representation), 我应该用 我自己的 Converter 创建一个 custom ConversionService。但我究竟该怎么做呢?

顺便说一句,我不明白为什么我必须这样做,因为 Spring Data Rest 使用 RepositoryEntityController 来构建调用类的 "toResources" 方法的 URL AbstractRepositoryRestController,构建调用自己的 "getDefaultSelfLink" 方法的 url。

为什么不以某种方式@Override 这些方法中的一种(或两种)?

我的疑问是:转换器如何替换此实现的行为?是因为是在 URL 构造之后调用的吗? 如果答案是肯定的,那么问题是转换器可以修改前一时刻已经构建的 URL,而 我宁愿只用我的自定义创建一次 url(而不是之后转换)。

有可能吗? 如何自定义 RepositoryEntityController 的行为

谢谢。

【问题讨论】:

    标签: spring spring-mvc spring-data-rest spring-hateoas


    【解决方案1】:

    按照here 为您的实体类实现ResourceProcessor。这将允许您将自定义链接添加到给定实体类的每个 Resource<> 对象。如果您希望删除/修改 Spring Data Rest 生成的链接,则需要实现 Converter,,因为在添加 SDR 链接之前执行 ResourceProcessors。

    【讨论】:

    • 感谢您的回答,亚当。我已经在尝试实现 ResourceProcessor,但我有这种奇怪的行为:stackoverflow.com/questions/38570857/…
    • 我不确定 ResourceProcessors 是否被执行 before SDR 创建他的链接,因为每个 ResourceProcessor 都执行 DURING RepositoryEntityController 中的方法,但是 在链接创建之后。
    • 我可以确认方法调用的链如下:ServletInvocableHandlerMethod.invokeAndHandle() -> RepositoryEntityController.getCollectionResource() -> ...链接创建... -> ServletInvocableHandlerMethod.returnValueHandlers。 handleReturnValue() -> ResourceProcessorHandlerMethodReturnValueHandler.handleReturnValue() -> ResourceProcessorInvoker.invokeProcessorsFor();因此,在链接创建之后调用 ResourceProcessor。
    猜你喜欢
    • 2014-10-06
    • 2017-01-18
    • 2017-04-27
    • 1970-01-01
    • 2017-04-27
    • 2018-04-18
    • 2015-12-31
    • 2015-03-25
    • 2014-01-29
    相关资源
    最近更新 更多