Question

J'aime vraiment le printemps et l' @Configuration de style pour se débarrasser de base de xml de configuration.J'ai réussi à l'utiliser pour la signification et le dépôt de la couche.Ce que j'aime aussi est l'injection de dépendance et la fonctionnalité de JDO/JPA/Jdbc utilitaires!

Ce que je ne comprends pas trop, comment le Printemps WebMVC œuvres.Il y a trop de mouvements incontrôlables de la magie pour moi.(et avec @EnableAutoConfiguration il n'y a même plus de magie présenté.Bon pour faciliter le prototypage, difficile à maintenir).

Voilà comment j'ai configurer ma webapp:

public class SpringWebBooter implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigApplicationContext rootContext = new AnnotationConfigApplicationContext();
        rootContext.register(SpringConfiguration.class); //main configuration class for all beans
        rootContext.refresh();

        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.setParent(rootContext);
        ctx.register(SpringWebConfiguration.class); //web context configuration class

        ServletRegistration.Dynamic api = servletContext.addServlet("api", new DispatcherServlet(ctx));
        api.setLoadOnStartup(1);
        api.addMapping("/api/*");
    }

}

Maintenant, je veux ajouter un type de convertisseurs et httpMessageConverters, donc dans le SpringWebConfiguration classe, j'ai essayé:

@EnableWebMvc
@Configuration
@ComponentScan
public class SpringWebConfiguration {

    //works but feels very *magic*
    @Autowired
    public void configureConversionService(FormattingConversionService conversionService) {
        conversionService.addConverter(new PointConverter(GEOMETRY_FACTORY));
        conversionService.addConverterFactory(new StringToEnumConverterFactory());
    }

    //not working yet
    @Bean
    public MappingJackson2HttpMessageConverter createJsonMessageConverter() {
        ObjectMapper o = new ObjectMapper();
        o.enable(SerializationFeature.INDENT_OUTPUT);
        MappingJackson2HttpMessageConverter c = new MappingJackson2HttpMessageConverter();
        c.setObjectMapper(o);
        return c;
    }
}

Ce que je préfère trouver intuitive consiste à ajouter un type de message et de convertisseurs quand je construis le répartiteur de la servlet.Ce serait beaucoup plus clair que certains douteuse permettra à l'autowiring ou des haricots création.J'ai toujours "l'espoir" que le Répartiteur de Servlet interne de photos de mes haricots, mais il est souvent juste d'essai et d'erreur. Est-il possible de configurer spring Mvc dans un directeur manière?Avec moins de magie et de plus concret instanciations et #addHttpMessageConverter(...) les appels, par exemple?

Même en principe pour le ExceptionResolvers, RequestHandler et RequestAdapter.

Jan

Était-ce utile?

La solution

La façon la plus directe serait de s'étendre WebMvcConfigurationSupport.Vous pouvez configurer presque tout de cette façon, en surchargeant les méthodes.

Mais sachez que c'est une façon très directe à l'installation des trucs.Il vous donne beaucoup plus de contrôle que vous avez maintenant, ou que même WebMvcConfigurerAdapter donneriez-vous.À partir de la documentation:

If the customization options of {@link WebMvcConfigurer} do not expose
something you need to configure, consider removing the {@code @EnableWebMvc}
annotation and extending directly from {@link WebMvcConfigurationSupport}
overriding selected {@code @Bean} methods

Personnalisé (ou sur mesure) message convertisseurs peuvent être ajoutés en substituant configureMessageConverters.

Autres conseils

Si vous étendez le webmvcconfigureAdapter pour votre configuration Web, il devrait ressentir un peu moins de magie et vous donner un crochet pour configurer vos convertisseurs de messages ainsi qu'un certain nombre d'autres composants.

    @Configuration
    @ComponentScan
    @EnableWebMvc
    public class WebConfiguration extends WebMvcConfigurerAdapter
    {
      @Autowired
      private CustomObjectMapper domainMapper;

      @Override
      public void configureMessageConverters(List<HttpMessageConverter<?>> converters)
      {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(domainMapper);
        converters.add(converter);
        super.configureMessageConverters(converters);
      }

    }

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top