Pregunta

Me gusta la primavera y el @estilo de Configuración para deshacerse de basado en xml de configuración.Puedo utilizar con éxito para el servicio de repositorio y capa.Lo que también me encanta es la dependencia de la función de inyección y el JDO/JPA/Jdbc utilidades!

Lo que yo realmente no se que es, cómo la Primavera WebMVC obras.Hay demasiado incontrolable magia para mí.(y con @EnableAutoConfiguration incluso hay más magia introducido.Bueno para la fácil creación de prototipos, difícil de mantener).

Que es ¿cómo puedo configurar mi 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/*");
    }

}

Ahora quiero agregar tipo de convertidores y httpMessageConverters, por lo que en el SpringWebConfiguration clase he intentado:

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

Lo prefiero encontrar intuitiva es agregar el tipo de mensaje y los convertidores de cuando se construyo el dispatcher servlet.Eso sería mucho más clara que la de una dudosa autowiring de soja o la creación.Yo siempre la "esperanza" de que el Dispatcher Servlet internamente fotos de mi frijoles, pero a menudo es sólo de prueba y error. Es posible configurar spring Mvc en un directer manera?Con menos magia y más en concreto los casos y #addHttpMessageConverter(...) las llamadas, por ejemplo?

Mismo, básicamente, por la ExceptionResolvers, RequestHandler y RequestAdapter.

Jan

¿Fue útil?

Solución

La forma más directa sería ampliar WebMvcConfigurationSupport.Puede configurar casi todo lo que manera de reemplazar los métodos.

Pero ser conscientes de que es una forma muy directa a la instalación de esas cosas.Que le da mucho más control que el que tienes ahora o que incluso WebMvcConfigurerAdapter le puede dar.A partir de la documentación:

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

Personalizado (o personalizado) mensaje de convertidores pueden ser añadidos por razones imperiosas de configureMessageConverters.

Otros consejos

Si extiende el webmvcconfigureradapter Para su configuración web, debe sentirse un poco menos magia y también le brinda el gancho para configurar sus convertidores de mensajes, así como una serie de otros componentes.

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

    }

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top