有一点还不够明确这部分 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;
}
}
但转换器从未被使用过:如果我去/authors
url,JSON 被解析为标准表示,并且转换器的“convert”方法永远不会被调用。
我想了解(可能通过一个工作示例)如何有一个自定义转换器参与输出表示的过程。
Thanks.