Как настроить пользовательские монго форматеры в Spring? - PullRequest
6 голосов
/ 20 августа 2011

Я занимался этим несколько часов и пока не нашел никого, кто бы это сделал. Я хочу сохранить объект BigDecimal в Mongo, но Mongo изначально не поддерживает BigDecimal. Я следовал документам Спринга здесь , но не повезло.

Из того, что я могу сказать, Spring не вводит мои собственные классы конвертера в Mongo при записи в базу данных. Вот что я сделал:

Мое приложениеContext-services.xml ...

    <!-- Factory bean that creates the Mongo instance -->
    <mongo:mongo 
        host="localhost" 
        port="1234" />

    <mongo:db-factory 
        dbname="solar" 
        mongo-ref="mongo"/>

    <mongo:mapping-converter>
      <mongo:custom-converters>
        <mongo:converter>
          <bean class="com.mine.BigDecimalReadConverter"/>
        </mongo:converter>
        <mongo:converter>
          <bean class="com.mine..BigDecimalWriteConverter"/>
        </mongo:converter>
      </mongo:custom-converters>
    </mongo:mapping-converter>

    <!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes -->

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

<bean id="mongoDbTest"
    class="com.mine.MongoDbTest">
    <property name="mongoTemplate">
        <ref local="mongoTemplate" />
    </property> 
</bean>

Я получаю ошибку:

java.lang.IllegalArgumentException: Multiple constructors with arguments found in class java.math.BigDecimal! Annotate one with @PreferedConstructor explicitly to select it to be used in persistence operations.
    at org.springframework.data.mapping.PreferredConstructorDiscoverer.<init>(PreferredConstructorDiscoverer.java:81)

Ответы [ 2 ]

0 голосов
/ 18 декабря 2013

Вот как я это решил.Порядок, в котором вы определяете бины, имеет значение.Итак, мой app.xml, с которым я работал, это:

</p>

<pre><code> <bean id="mappingContext" class="org.springframework.data.document.mongodb.mapping.MongoMappingContext"/>

<bean id="readConverter"  class="com.mine.BigDecimalReadConverter"/>
<bean id="writeConverter"  class="com.mine.BigDecimalWriteConverter"/>

<mongo:mapping-converter id="mappingConverter">
    <mongo:custom-converters>
        <mongo:converter ref="readConverter" />
        <mongo:converter ref="writeConverter" />
    </mongo:custom-converters>
</mongo:mapping-converter>

<!-- Factory bean that creates the Mongo instance -->
<mongo:mongo 
    host="${${environment}.mongodb.host}" 
    port="${${environment}.mongodb.port}" />

<mongo:db-factory 
    dbname="${${environment}.mongodb.databaseName}" 
    mongo-ref="mongo"/>   

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

<!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

0 голосов
/ 16 декабря 2013

Попробуйте использовать это для поддержки конвертера:

<bean id="mappingContext"
    class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" lazy-init="true"/>

 <bean id="defaultMongoTypeMapper"
    class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper" lazy-init="true">
    <constructor-arg name="typeKey"><null/></constructor-arg>
 </bean>

 <bean id="mappingMongoConverter"
    class="org.springframework.data.mongodb.core.convert.MappingMongoConverter" lazy-init="true" >
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    <constructor-arg name="mappingContext" ref="mappingContext" />
    <property name="typeMapper" ref="defaultMongoTypeMapper" />
 </bean>

 <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate" lazy-init="true">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    <constructor-arg name="mongoConverter" ref="mappingMongoConverter" />
 </bean>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...