Пользовательский преобразователь не называется Spring Data Mongodb [не может сериализовать ошибки класса] - PullRequest
0 голосов
/ 06 марта 2019

У меня есть Пользователь bean-компонент со свойством адрес . Я реализовал пользовательский конвертер для класса User и Address и настроил его в весеннем XML. Конвертер для пользователя вызывается каждый раз, когда я сохраняю объект пользователя. Но конвертер для адреса не вызывается при сохранении пользователя, и он, выбрасывающий , не может сериализовать класс com.mkyong.model.Address .

Вот моя структура классов и конфиг Xml:

Класс пользователя:

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 + "]";
    }

}

Адрес класса:

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 + "]";
    }
}

конфигурация пружины:

<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>

Конвертер пользователя:

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;
    }

}

Конвертер адресов:

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();
    }

}

Я очень новичок в весеннем mongodb. Любая помощь с благодарностью!

...