سؤال

أنا حقا أحب الربيع @التكوين أسلوب للتخلص من xml القائمة على التكوين.أنا استخدامها بنجاح من أجل خدمة مستودع طبقة.ما أحب أيضا هو حقن التبعية الميزة و JDO/JPA/Jdbc المرافق!

ما أنا لا أفهم كيف الربيع WebMVC يعمل.هناك الكثير لا يمكن السيطرة عليها السحر بالنسبة لي.(و مع @EnableAutoConfiguration هناك المزيد من السحر قدم.جيد لسهولة النماذج الصعب الحفاظ عليها).

هذا هو كيف يتم تكوين 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/*");
    }

}

الآن أريد أن أضيف نوع المحولات و httpMessageConverters ، وذلك في SpringWebConfiguration فئة حاولت:

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

ماذا سنجد بديهية هو إضافة نوع الرسالة محولات عندما كنت بناء المرسل بريمج.التي من شأنها أن تكون أكثر وضوحا بكثير من بعض مشكوك فيها autowiring أو الفول الخلق.أنا دائما "الأمل" في أن المرسل بريمج داخليا صورة بلدي الفول ، ولكن غالبا ما يكون مجرد التجربة والخطأ. هل من الممكن انشاء الربيع Mvc في directer الطريقة?مع أقل السحر ملموسة أكثر التجسيدات و #addHttpMessageConverter(...) يدعو على سبيل المثال ؟

نفس الأساس بالنسبة ExceptionResolvers, RequestHandler و RequestAdapter.

يناير

هل كانت مفيدة؟

المحلول

الطريقة الأكثر مباشرة سيكون تمديد WebMvcConfigurationSupport.يمكنك إعداد كل شيء تقريبا من هذا الطريق عن طريق تجاوز الأساليب.

ولكن أن تكون على علم أنه هو مباشر جدا طريقة الإعداد الأشياء.فهو يوفر لك المزيد من التحكم من الآن أو حتى WebMvcConfigurerAdapter من شأنها أن تعطي لك.من مستندات:

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

مخصص (أو حسب الطلب) رسالة المحولات يمكن أن تضاف عن طريق تجاوز configureMessageConverters.

نصائح أخرى

إذا كنت تمديد WebMvcConfigurerAdapter الويب الخاص بك التكوين ، فإنه ينبغي أن يشعر أقل قليلا من السحر و أيضا تعطيك هوك لتكوين رسالة محولات فضلا عن عدد من المكونات الأخرى.

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

    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top