[英]custom converter not called spring data mongodb [can't serialize class error]
I have a User bean with a property address .我有一个带有属性address的User bean。 I have implemented custom converter for the User and the Address class and configured the same in spring XML.
我已经为 User 和 Address 类实现了自定义转换器,并在 spring XML 中配置了相同的转换器。 The converter for User is getting called every time I save User object.
每次我保存 User 对象时,都会调用 User 的转换器。 But, converter for Address is not getting called while saving the User and it throwing can't serialize class com.mkyong.model.Address .
但是,地址转换器在保存用户时没有被调用,并且它抛出无法序列化类 com.mkyong.model.Address 。
Here is my class structure and Xml config:这是我的类结构和 Xml 配置:
User Class:用户类别:
package com.mkyong.model;
import java.util.Map;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "person")
public class User {
@Id
private String id;
String username;
String password;
Address address;
Map data;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public Map getData() {
return data;
}
public void setData(Map data) {
this.data = data;
}
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}
Address class :地址类:
package com.mkyong.model;
import java.io.Serializable;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "address")
public class Address implements Serializable {
/**
*
*/
private static final long serialVersionUID = 2310280839505243479L;
String city;
String dist;
String state;
public Address(String city, String dist, String state) {
super();
this.city = city;
this.dist = dist;
this.state = state;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDist() {
return dist;
}
public void setDist(String dist) {
this.dist = dist;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
@Override
public String toString() {
return "Address [city=" + city + ", dist=" + dist + ", state=" + state + "]";
}
}
spring configuration:弹簧配置:
<mongo:mongo host="127.0.0.1" port="27017" />
<mongo:db-factory dbname="springbootdb" />
<mongo:mapping-converter id="mongoConverter">
<mongo:custom-converters base-package="com.mkyong.model">
<mongo:converter>
<bean class="com.mkyong.converter.UserConverter" />
</mongo:converter>
<mongo:converter>
<bean class="com.mkyong.converter.AddressConverter" />
</mongo:converter>
</mongo:custom-converters>
</mongo:mapping-converter>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoConverter" ref="mongoConverter" />
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>
User Converter :用户转换器:
package com.mkyong.converter;
import org.springframework.core.convert.converter.Converter;
import com.mkyong.model.User;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
public class UserConverter implements Converter<User, DBObject> {
@Override
public DBObject convert(User user) {
DBObject dbObject = new BasicDBObject();
dbObject.put("_id", user.getId());
dbObject.put("_address", user.getAddress());
System.out.println("called !!!!!");
return dbObject;
}
}
Address Converter :地址转换器:
package com.mkyong.converter;
import org.springframework.core.convert.converter.Converter;
import com.mkyong.model.Address;
import com.mkyong.model.DecimalNumber;
import com.mkyong.model.User;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
public class AddressConverter implements Converter<Address, String> {
@Override
public String convert(Address user) {
System.out.println("Not called!!!");
return user==null ? null : user.toString();
}
}
I am very new to spring mongodb.我对 spring mongodb 很陌生。 Any help is greatly appreciated!
任何帮助是极大的赞赏!
请使用@Component
注释UserConverter
,以便 Spring Container 选择您的转换器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.