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 конвертера никогда не вызывается.

Я хочу понять (возможно, с рабочим примером), каким образом пользовательский конвертер участвует в процессе представления вывода.

Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос