Spring Data Rest: ¿cómo registrar un servicio de conversión personalizado con el convertidor personalizado <Entidad, Recurso>?

Hay algo que no está suficientemente claro enesta parte de la documentación de Spring Data Rest:

El exportador Spring Data REST ejecuta cualquier ResourceProcessor descubierto antes de crear la representación de salida.

Por lo que he notado, es cierto: ResourceProcessor se invoca durante el manejo de la solicitud, después de completar el método respectivo RepositoryEntityController.

Lo hace registrando unConverter<Entity, Resource> instancia con un ConversionService interno.

No entiendo cuando se usa estoConverter<Entity,Resource>.

Este es el componente responsable de crear los enlaces a las entidades a las que se hace referencia (por ejemplo, aquellos objetos bajo la propiedad _links en la representación JSON del objeto). Toma una @Entity e itera sobre sus propiedades, creando enlaces para aquellas propiedades que son administradas por un Repositorio y copiando a través de cualquier propiedad incrustada o simple.

¿Seguro? Me di cuenta de que el_Enlaces a las entidades referenciadas se crean en elRepositoryEntityController. No vi ningún otro componente que construya esos enlaces: no hay ConversionService o Converter involucrados.

Sin embargo, si su proyecto necesita tener resultados en un formato diferente, es posible reemplazar completamente la representación JSON saliente predeterminada con la suya. Si registra su propio ConversionService en ApplicationContext y registra su propio Convertidor, puede devolver una implementación de Recursos de su elección.

No entiendo cómo es posible hacer eso.

He intentado hacer exactamente lo que está escrito en la documentación: he registrado mi propio ConversionService en ApplicationContext y mi propio convertidor.

He registrado el ConversionService en una clase personalizada que extiende 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();
    }
}

Este es el 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;
    }

}

Pero el convertidor nunca se usa: si voy al/authors url, el JSON se resuelve como la representación estándar, y el método "convertir" del convertidor nunca se invoca.

Quiero entender (posiblemente con un ejemplo de trabajo) cómo tener un convertidor personalizado que está involucrado en el proceso de la representación de salida.

Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta