Как настроить Model Mapper с конечными точками Google Cloud только один раз? - PullRequest
0 голосов
/ 21 октября 2019

Пока что я работал только с Spring boot и model mapper. При загрузке 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 я просто настроил отображение модели следующим образом:

@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;
    }

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

Спасибо!

1 Ответ

1 голос
/ 26 октября 2019

Вы можете сделать это, используя 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;
    }
}
...