Как настроить Model Mapper с конечными точками Google Cloud только один раз?

До сих пор я работал только с загрузкой Spring и сопоставителем моделей. При загрузке Spring мне просто нужно было один раз создать Bean, где я бы настроил сопоставитель модели (например, пользовательские преобразователи), а затем просто вернул его экземпляр.

Но сейчас я работаю в «обычном» проекте Maven, посвященном Google Cloud, и мы используем облачные конечные точки. Для внедрения зависимостей мы используем Guice. И мы устанавливаем наши зависимости для внедрения следующим образом:

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.servlet.GuiceServletContextListener;

public class GuiceListener extends GuiceServletContextListener {

    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new GuiceModule());
    }
}



import com.google.api.server.spi.guice.EndpointsModule;
import com.google.common.collect.ImmutableList;

public class GuiceModule extends EndpointsModule {
    @Override
    public void configureServlets() {
        super.configureServlets();
        bind(ModelMapper.class).toInstance(new ModelMapper());
        bind(UsuariosEndpoint.class).toInstance(new UsuariosEndpoint());
        bind(ServiciosEndpoint.class).toInstance(new ServiciosEndpoint());
        configureEndpoints("/_ah/api/*", ImmutableList.of(UsuariosEndpoint.class, 
                ServiciosEndpoint.class));
        bind(ComunidadesAutonomasService.class).to(ComunidadesAutonomasServiceImpl.class);
        bind(CategoriasService.class).to(CategoriasServiceImpl.class);
    }
}

В Spring boot я просто настроил сопоставитель модели следующим образом:

@Bean("ModelMapper")
    public ModelMapper modelMapper() {
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.getConfiguration().setCollectionsMergeEnabled(false);
        modelMapper.addConverter(new LocalDateToString());
        modelMapper.addConverter(new StringToLocalDate());
        modelMapper.addConverter(new LocalDateTimeToString());
        modelMapper.addConverter(new StringToLocalDateTime());
        return modelMapper;
    }

Итак, мой вопрос: как я могу настроить Model Mapper в моем текущем проекте с помощью Guice, как я это делал при загрузке Spring.

Спасибо !


person Ulises CT    schedule 21.10.2019    source источник


Ответы (1)


Это можно сделать с помощью Provides Methods из Google Guice.

Пример -

public class GuiceModule extends EndpointsModule {
    @Override
    public void configureServlets() {
        super.configureServlets();
        bind(UsuariosEndpoint.class).toInstance(new UsuariosEndpoint());
        bind(ServiciosEndpoint.class).toInstance(new ServiciosEndpoint());
        configureEndpoints("/_ah/api/*", ImmutableList.of(UsuariosEndpoint.class, 
                ServiciosEndpoint.class));
        bind(ComunidadesAutonomasService.class).to(ComunidadesAutonomasServiceImpl.class);
        bind(CategoriasService.class).to(CategoriasServiceImpl.class);
    }

    @Provides
    @Singleton
    public ModelMapper provideModelMapper() {
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.getConfiguration().setCollectionsMergeEnabled(false);
        modelMapper.addConverter(new LocalDateToString());
        modelMapper.addConverter(new StringToLocalDate());
        modelMapper.addConverter(new LocalDateTimeToString());
        modelMapper.addConverter(new StringToLocalDateTime());

        return modelMapper;
    }
}
person Sneh    schedule 26.10.2019