自定义映射Spring MVC, Spring Data MongoDB



我的项目使用Spring MVC和Spring Data MongoDB连接MongoDB数据库这是我的示例代码:

public class Data extends BasicDBObject{
    @Id
    public String id;
    @Transient
    public String obName;
    public String getId() {
       return id;
    }
    public void setId(String id) {
       this.id = id;
    }
    public String getObName() {
       return obName;
    }
    public void setObName(String obName) {
       this.obName = obName;
    }
}

自定义转换器

@ReadingConverter
public class DataReadConverter implements Converter<BasicDBObject, Data>{
    /* (non-Javadoc)
     * @see org.springframework.core.convert.converter.Converter#convert(java.lang.Object)
     */
    @Override
    public Data convert(BasicDBObject source) {
        Data data = new Data();
        data.setId((ObjectId) source.get("_id"));
        data.putAll(source.toMap());
        return data;
    }

}

寄存器转换器

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd
      http://www.springframework.org/schema/data/mongo
      http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!--    MongoDB Config -->
<mongo:mongo host="localhost" port="27017" />
<mongo:db-factory dbname="opmdrive" mongo-ref="mongo"/>

<mongo:mapping-converter base-package="com.chick.opm.model.object">
    <mongo:custom-converters>
        <mongo:converter>
            <bean class="com.chick.opm.spring.DataReadConverter"/>
        </mongo:converter>
        <mongo:converter>
            <bean class="com.chick.opm.spring.DataWriteConverter"/>
        </mongo:converter>
    </mongo:custom-converters>
</mongo:mapping-converter>
<bean id="mongoOperation" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    <constructor-arg name="mongoConverter" ref="mappingConverter"/>
</bean>
<bean class="org.springframework.data.mongodb.core.mapping.event.LoggingEventListener"/>

获取数据和映射

List<Data> updatedUser = getCurrentMongoOperations().findAll(Data.class, "accounts");
System.out.println(updatedUser.get(0).getId().toStringMongod());
return updatedUser;

实际结果
错误不能将BasicDBObject强制转换为Data

期望结果

[
  {
    "id": "5820428b1a82a72dfce0c914",
    "username": 17671794,
    "password": "mypassword"
  },
  {
    "id": "5820428d1a82a72dfce0c915",
    "username": 81964940,
    "password": "mypassword"
  },
  {
    "id": "5822a7e642af5424d0bb07ab",
    "username": 75165254,
    "password": "mypassword"
  }
]

最后我发现解决方案是。tomap()函数之前响应一个hashMap像这样:

Map map = ((HashMap) collectionService.getById(id, dataName)).toMap()
return map;

最新更新