Эквивалент mvc: default-servlet-handler в конфигурации на основе аннотаций Spring? - PullRequest
16 голосов
/ 21 февраля 2011

Возможно ли иметь эквивалент <mvc:default-servlet-handler/>, определенный в AnnotationConfig(Web)ApplicationContext? Прямо сейчас у меня есть:

@Configuration
@ImportResource("classpath:/mvc-resources.xml")
class AppConfig {
  // Other configuration...
}

со следующим в моем resources/mvc-resources.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:default-servlet-handler/>
</beans>

И все работает как положено. Возможно ли это сделать без импорта файла XML? Это был бы хороший способ сократить некоторые шаблоны.

Ответы [ 4 ]

32 голосов
/ 15 ноября 2011

Если вы используете Spring 3.1 с WebMvc, вы можете настроить обработку сервлета по умолчанию следующим образом:

@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}
4 голосов
/ 28 февраля 2011

Пройдя немного глубже, я обнаружил, что это известная проблема, и она решается с помощью функций аннотации в следующей Spring 3.1 .

Я решил свою проблему с помощью следующего кода:

@Configuration
@Import(FeatureConfig.class)
class AppConfig {
   ...
}

@FeatureConfiguration
class FeatureConfig {
  @Feature
  public MvcDefaultServletHandler defaultHandler() {
    return new MvcDefaultServletHandler();
  }
}

Это требует использования веховой версии пружины, хотя, но, похоже, это самый чистый и предпочтительный способ справиться с этим.

1 голос
/ 21 февраля 2011

Я не думаю, что вы можете сделать это из коробки, но вы, вероятно, можете скопировать , что DefaultServletHandlerBeanDefinitionParser делает : создать Бин типа DefaultServletHttpRequestHandler и карту это к схеме URL /**.

Я бы сказал, что ваш Бин должен иметь подкласс DefaultServletHttpRequestHandler и выполнить отображение в @PostConstruct методе .

0 голосов
/ 21 февраля 2011
@Bean
public DefaultServletHttpRequestHandler defaultServletHttpRequestHandler() {
  return new DefaultServletHttpRequestHandler();
}

@Bean
public SimpleUrlHandlerMapping simpleUrlHandlerMapping() {
  Map<String, String> urlMap = new ManagedMap<String, String>();
  urlMap.put("/**", defaultServletHandlerName);

  SimpleUrlHandlerMapping hm = new SimpleUrlHandlerMapping();
  hm.setUrlMap(urlMap);
  return hm;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...