Spring Data Rest:如何使用自定义 Converter 注册自定义 conversionService?

2024-03-19

有一点还不够明确这部分 http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_customizing_the_representationSpring Data Rest 文档:

Spring Data REST 导出器执行任何发现的 ResourceProcessor 在创建输出表示之前。

据我所知,这是事实:ResourceProcessor 在处理请求期间、在 RepositoryEntityController 各自的方法完成之后被调用。

它通过注册一个来做到这一点Converter<Entity, Resource>实例 使用内部 ConversionService。

不明白什么时候用这个Converter<Entity,Resource>.

这是负责创建引用链接的组件 实体(例如,对象的 _links 属性下的那些对象 JSON 表示)。它需要一个 @Entity 并迭代它的 属性,为由管理的属性创建链接 跨任何嵌入或简单属性的存储库和复制。

当然?我注意到_links到引用的实体被创建在RepositoryEntityController。我没有看到任何其他组件来构建这些链接:不涉及 ConversionService 或 Converter。

但是,如果您的项目需要不同格式的输出, 可以完全替换默认的传出 JSON 与你自己的代表。如果您自己注册 在ApplicationContext中的ConversionService并注册你自己的 Converter,然后就可以返回一个Resource 实施您的选择。

我不明白怎么可能做到这一点。

我尝试完全按照文档中所写的操作:我已在 ApplicationContext 和我自己的转换器中注册了自己的 ConversionService。

我已在扩展 RepositoryRestMvcConfiguration 的自定义类中注册 ConversionService:

@Configuration
public class RepositoryConfiguration extends RepositoryRestMvcConfiguration {

    @Autowired
    AuthorConverter authorConverter;

    @Bean(name="conversionService")
    public ConversionService getConversionService() {       
        DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
        conversionService.addConverter(authorConverter);
        return conversionService;
    }

    @Override
    public DefaultFormattingConversionService defaultConversionService() {
        return (DefaultFormattingConversionService) getConversionService();
    }
}

这是作者转换器:

@Component
public class AuthorConverter implements Converter<Author, Resource> {

    @Override
    public Resource convert(Author source) {
        System.out.println("convert method of class AuthorConverter");
        // still to be implemented
        return null;
    }

}

但转换器从未被使用过:如果我去/authorsurl,JSON 被解析为标准表示,并且转换器的“convert”方法永远不会被调用。

我想了解(可能通过一个工作示例)如何有一个自定义转换器参与输出表示的过程。

Thanks.


这篇文章有帮助吗? 来源:http://www.baeldung.com/spring-httpmessageconverter-rest http://www.baeldung.com/spring-httpmessageconverter-rest

“我们可以通过扩展 WebMvcConfigurerAdapter 类并重写 configureMessageConverters 方法来自定义消息转换器:

@EnableWebMvc
@Configuration
@ComponentScan({ "org.baeldung.web" })
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(
      List<HttpMessageConverter<?>> converters) {

        messageConverters.add(createXmlHttpMessageConverter());
        messageConverters.add(new MappingJackson2HttpMessageConverter());

        super.configureMessageConverters(converters);
    }
    private HttpMessageConverter<Object> createXmlHttpMessageConverter() {
        MarshallingHttpMessageConverter xmlConverter = 
          new MarshallingHttpMessageConverter();

        XStreamMarshaller xstreamMarshaller = new XStreamMarshaller();
        xmlConverter.setMarshaller(xstreamMarshaller);
        xmlConverter.setUnmarshaller(xstreamMarshaller);

        return xmlConverter;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data Rest:如何使用自定义 Converter 注册自定义 conversionService? 的相关文章

随机推荐

  • 解析装饰器中的 args 和 kwargs

    我有一个需要 args 和 kwargs 的函数 我需要根据 args 和 kwargs 的值在我的装饰器中做一些事情2nd函数中的arg 如下面的代码所示 def workaround func def decorator fn def
  • 从 UWP 应用检查转储文件

    首先 我在 Windows 10 手机上启用转储文件的保存 设置 gt 更新和安全 gt 对于开发人员 gt 保存这么多故障转储 3 然后我调试了一个引发异常的应用程序 我停止后继续调试 断开并再次连接手机后 我能够访问存储在下的转储文件W
  • ASP.Net MVC 中静态文件的永久重定向旧路由

    我们旧的 ASP net 站点将静态图像存储在根目录的子目录中 名为 images 我们新的 ASP net MVC 站点将这些图像存储在新的布局中 内容 图片 我已经更改了网站中的所有页面以适应新的文件夹结构 但我想设置从旧静态图像到新位
  • 为什么表格比 CSS 更糟糕? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP MYSQL 关联数组和表

    这是一个代码 这会从数据库动态加载所有标题部分 即表的标题 下面的代码工作正常 但该列不匹配 即标题的第一行第一列是空白的并且表格中存在错位 Code table border 1 th th table
  • 如何在特定时间和日期运行函数?

    如何在给定时间和日期运行函数 示例 我有一个函数需要在每月 12 日上午 10 点运行 如果这很重要 此页面将 24 7 运行 显然我必须与当前日期进行比较 但我不确定如何检查当前日期和时间是否匹配 Shannon 不建议使用setInte
  • 计算大负值的指数

    我想知道R中如何得到大负数的指数 例如 当我尝试时 gt exp 6400 1 0 gt exp 1200 1 0 gt exp 2000 1 0 但我需要上面表达式的值 即使它很小 我怎样才能在R中得到它 这些数字太小了 要了解您的计算机
  • 列表视图中空白区域的上下文菜单

    我有一个简单的 LinearLayout 里面有 ListView match parent宽度和高度 我需要一个上下文菜单 以便在长时间触摸列表视图中的任何位置时显示 首先 我打电话registerForContextMenu对于列表视图
  • AVPlayer 是否支持在单独的文本文件中提供隐藏式字幕?

    我的团队开发使用 AVPlayer 播放视频的 iOS 应用程序 最近我们被告知 必须允许显示所有视频的隐藏式字幕 但隐藏式字幕不会作为视频文件中的轨道出现 我们已经支持以这种方式出现的隐藏式字幕 相反 我们会将它们作为单独的文本文件获取
  • 与SSE性能相同

    我对以下循环进行了矢量化 该循环出现在我正在开发的应用程序中 void vecScl Node A Node B long val int fact round dot const for i 0 i
  • Symfony 命令中的 RenderView 用法

    如何在 symfony 命令内 而不是在控制器内 使用 this gt renderView 我对 renderView 功能很陌生 但是我必须设置什么才能在命令中使用它 预先感谢您的问候 您的命令类必须扩展ContainerAwareCo
  • 如何在 MySql 的 SQL 查询中将行折叠成逗号分隔的列表

    在 T SQL 中 将相关值连接到 SQL 查询中的逗号分隔字符串中相对简单 请参见此处 将 SELECT 的行折叠成字符串的最佳方法是什么 https stackoverflow com questions 822615 what is
  • 将目录中的所有 csv 文件导入为 pandas dfs 并将其命名为 csv 文件名

    我正在尝试编写一个脚本 将目录中的所有 csv 文件作为数据帧导入到我的工作区 每个数据帧应命名为 csv 文件 减去扩展名 csv 这是我到目前为止所拥有的 但很难理解如何为循环中的数据帧分配正确的名称 我看过建议使用的帖子exec 但这
  • 我可以使用 git-svn 并看起来像我在使用 SVN 吗?如果是的话,如何?

    我习惯了 git 并且非常喜欢它 但是我的一个客户 仍然 使用 subversion 我现在不太了解 svn 但我知道有一个 git svn 包 我知道可以使用 git 从 svn 获取存储库 但是我可以使用 git 而不是 svn 并仍然
  • 如何查看 PKCS 7 文件中签署了哪些属性?

    我有一个PKCS 7 https en wikipedia org wiki PKCS 7文件 其中包含签名数据 它成功验证 openssl smime verify in data p7s CAfile root certificate
  • 如何使用 .net 4 api 端点从 Request.Content 对象获取原始请求正文

    我正在尝试捕获原始请求数据以进行问责 并希望从 Request 对象中提取请求正文内容 我见过执行 Request InputStream 的建议 但此方法在 Request 对象上不可用 知道如何获取 Request Content 正文
  • 以最低权限运行 Heroku Postgres

    我可以通过 Web 应用程序连接到 Heroku Postgres 数据库而不会有删除表的风险吗 我正在为第三方构建一个 Heroku 应用程序 该应用程序使用 Heroku Postgres 作为后端 第三方对安全性非常敏感 因此我正在考
  • Google AppEngine - 如何为 Google AppEngine 设置默认字符集/文件编码(为 UTF-8)

    情况 我在用着AppEngine 云端点 Java https cloud google com appengine docs java endpoints 作为我的 Android 应用程序的后端服务器 在 Cron Job 中 服务器定
  • 将固定文档保存到 XPS 文件会导致内存泄漏

    我创建了一个 NET Windows 服务 它执行某些操作并生成报告 这些报告是我保存在某个目录中的XPS文档 熟悉 WPF 我选择创建报告的方式是实例化一个System Windows Documents FixedDocument 添加
  • Spring Data Rest:如何使用自定义 Converter 注册自定义 conversionService?

    有一点还不够明确这部分 http docs spring io spring data rest docs current reference html customizing the representationSpring Data R