Spring Data Rest: как зарегистрировать пользовательский конверсионный сервис с пользовательским конвертером <Entity, Resource>?
Есть что-то, что недостаточно ясноэта часть документации Spring Data Rest:
Экспортер Spring Data REST выполняет любой обнаруженный ResourceProcessor перед созданием выходного представления.
Что я заметил, это правда: ResourceProcessor вызываются во время обработки запроса, после завершения соответствующего метода RepositoryEntityController.
Это делается путем регистрацииConverter<Entity, Resource>
экземпляр с внутренним ConversionService.
Я не понимаю, когда это используетсяConverter<Entity,Resource>
.
Это компонент, отвечающий за создание ссылок на ссылочные объекты (например, те объекты, которые находятся в свойстве _links в JSON-представлении объекта). Он принимает @Entity и выполняет итерацию по своим свойствам, создавая ссылки для тех свойств, которыми управляет репозиторий, и копируя любые встроенные или простые свойства.
Конечно? Я заметил, что_links к ссылочным объектам создаются вRepositoryEntityController
, Я не видел никаких других компонентов, которые создают эти ссылки: ни ConversionService, ни Converter не участвуют.
Однако если ваш проект должен иметь выходные данные в другом формате, можно полностью заменить исходящее представление JSON по умолчанию своим собственным. Если вы зарегистрируете свой собственный ConversionService в ApplicationContext и зарегистрируете свой собственный Converter, то вы можете вернуть реализацию Resource по вашему выбору.
Я не понимаю, как это можно сделать.
Я попытался сделать именно то, что написано в документации: я зарегистрировал свой собственный ConversionService в ApplicationContext и мой собственный конвертер.
Я зарегистрировал ConversionService в пользовательском классе, который расширяет RepositoryRestMvcConfiguration:
@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();
}
}
Это AuthorConverter:
@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 конвертера никогда не вызывается.
Я хочу понять (возможно, с рабочим примером), каким образом пользовательский конвертер участвует в процессе представления вывода.
Благодарю.