Spring + Custom Converter + Mongodb

时间:2013-03-26 04:15:28

标签: spring mongodb converter

我收到了错误,并且不知道在哪里调试。

ConverterNotFoundException:找不到能够从类型@ javax.validation.constraints.NotNull转换的转换器java.util.HashMap< @javax.validation.constraints.NotNull java.lang.String,@ javax.validation.constraints .NotNull java.util.Date>输入java.lang.String

我已经设置了我的应用程序上下文:

<mongo:mapping-converter id="mongoConverter" base-package="com.app">
    <mongo:custom-converters>
      <mongo:converter>
            <bean class="com.app.util.converter.HashMapToStringConverter" />
      </mongo:converter>
        <mongo:converter>
            <bean class="com.app.util.converter.StringToHashMapConverter" />
        </mongo:converter>
    </mongo:custom-converters>
</mongo:mapping-converter> 


<bean class="org.springframework.data.mongodb.core.MongoTemplate" id="mongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
    <constructor-arg name="mongoConverter" ref="mongoConverter"/>
</bean>

我的一个转换器是:

public class HashMapToStringConverter implements Converter<HashMap<String,Date>, String>{
    @Override
    public String convert(HashMap<String,Date> map) {       
        if(map==null){
            throw new ConversionFailedException(TypeDescriptor.valueOf(HashMap.class), 
                    TypeDescriptor.valueOf(String.class), map, null);           
        }       
        StringBuilder sb = new StringBuilder();
        boolean first = true;
        for(Map.Entry<String, ?> e: map.entrySet()){             
            if(!first){ 
                sb.append(",");
                first=!first;
            }            
             sb.append(e.getKey());
             sb.append("::");
             sb.append(e.getValue());           
        }       
        return sb.toString();
    }
}

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,但情况完全不同。我有一个DefaultConversionService的自定义装饰器。

我所做的是调用方法addConverter并添加我的自定义转换器。

我有类似的东西:

public class MyConverter<Class1, Class2> {...}

在我的另一个代码中:

DefaultConversionService cs = new MyDecoratorConversionService(new DefaultConversionService());

cs.addConverter(new MyConverter());