@Maa-Kut

Почему не подхватывается Converter?

Доброго всем дня.

Прошу помощи со следующей проблемкой.

Есть у меня приложение на Spring MVC 4.3.2. В нем есть контроллер, принимающий некий строковый параметр. Этот строковый параметр я для пущей типизированности хочу превратить в enum. Т.е. имея:
package my.app.enums;

public enum Option {
    OPTION_1,
    OPTION_2,
    OPTION_3;
}

хочу, чтобы можно было сделать контроллер:
@Controller
@RequestMapping("foo")
public class MyController {

    @RequestMapping("bar/{option}")
    public ModelAndView getBar(@PathVariable("option") Option option) {
        // всяко-разно
    }
}


С этой целью пишу свой конвертер:
import org.springframework.core.convert.converter.Converter;
import my.app.enums.Option;

public class OptionConverter implements Converter<String, Option> {
   @Override
   public Option convert(String source) {
       return Option.valueOf(source); // на самом деле, посложнее, но это не суть
   }
}


Далее, в соответствии с документацией (docs.spring.io/spring/docs/current/spring-framewor... ) в настроечном XML объявляю и конфигурирую conversion service:
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set merge="true">
            <bean class="my.app.OptionConverter"/>
        </set>
    </property>
</bean>


Наконец, иду на localhost:8080/foo/bar/OPTION_1 иии... все падает с ConversionNotSupportedException: Spring нагло заявляет, что не видит способа превратить java.lang.Spring в my.app.enum.Option.

Поставив бряк в методе convertIfNecessary класса TypeConverterDelegate, обратил внимание там фигурирует некий PropertyEditorRegistrySupport. Интернеты говорят, что, дескать, Spring почему-то вообще не стал conversionService использовать, хотя под отладкой видно, что инстанция ConversionServiceFactoryBean создается и ее свойство converters инициализируется.

В общем, чувствую, что застрял или очень сильно туплю. Подскажите, куда бы еще копнуть?
  • Вопрос задан
  • 570 просмотров
Пригласить эксперта
Ответы на вопрос 1
EugeneP2
@EugeneP2
Java Dev
Сам бин conversionService нужно указать в <mvc:annotation-driven/>

Conversion and Formatting

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set merge="true">
            <bean class="my.app.OptionConverter"/>
        </set>
    </property>
</bean>

  <mvc:annotation-driven conversion-service="conversionService"/>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы