Spring Data mongo 自定义转换器不调用也不保存 [英] Spring Data mongo custom Converter is not calling and not saving

查看:45
本文介绍了Spring Data mongo 自定义转换器不调用也不保存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 POJO.我想通过使用 spring 数据 mongodb 添加一些附加字段将其保存到 mongoDB.为此,我创建了自定义转换器.但是这个自定义自定义转换器不会调用,也不会按照自定义转换器进行保存.请帮帮我

I have a POJO. I want to save it to mongoDB by adding some additional fields using spring data mongodb. For this, i created custom converter. But this custom custom converter is not calling and not saving as per custom converter. Please help me

这里是 MongoDbConfiguration 类:

Here MongoDbConfiguration class:

@Configuration
@EnableMongoRepositories(basePackages = { "com.db.sample" })
@ComponentScan(basePackages = "com.db.sample")
public class MongoDbConfiguration extends AbstractMongoConfiguration {

    @Override
    protected String getDatabaseName() {
        return "test";
    }

    @Override
    public Mongo mongo() throws Exception {
        return new MongoClient("127.0.0.1", 27017);
    }

    @Override
    public CustomConversions customConversions() {
        List<Converter<?, ?>> converterList = new ArrayList<Converter<?, ?>>();
        converterList.add(new SampleEventWriterConverter());
        return new CustomConversions(converterList);
    }

    @Override
    public String getMappingBasePackage() {
        return "com.db.sample";
     }

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        MongoTemplate mongoTemplate = new MongoTemplate(mongo(), "test");
        MappingMongoConverter mongoMapping = (MappingMongoConverter) mongoTemplate.getConverter();
        mongoMapping.setCustomConversions(customConversions());
        mongoMapping.afterPropertiesSet();
        return mongoTemplate;
    }
}

这里是 SampleEventWriterConverter 类:

Here SampleEventWriterConverter class:

@Component
public class SampleEventWriterConverter implements Converter<SampleEvent, Document> {
    @Override
    public Document convert(SampleEvent event) {
        Document doc = new Document();
        doc.put("_id", event.getId());
        // …
        doc.put("sample", "test");
        for (Map.Entry<String, Object> entry : event.getFields().entrySet()) {
            doc.put(entry.getKey(), entry.getValue());
        }
        return doc;
    }
}

这里是存储库类:

@Repository
public interface SampleEventRepository extends MongoRepository<SampleEvent, ObjectId> {

}

这里是POJO类:

@Document(collection = "sample_event")
public class SampleEvent implements Serializable{

    @Id
    private ObjectId id;

    private Map<String, Object> fields = new HashMap<String, Object>();

    public ObjectId getId() {
        return id;
    }

    public void setId(ObjectId id) {
        this.id = id;
    }

    @JsonAnyGetter
    public Map<String, Object> any() {
       return fields;
    }

    @JsonAnySetter
    public void set(String name, Object value) {
       fields.put(name, value);
    }
    public void setFields(Map<String, Object> obj) {
         fields = obj;
    }

    public Map<String, Object> getFields() {
        return fields;
    }
}

我的主要课程:

 @Autowired
  private SampleEventRepository sampleEventRepository;
  SampleEvent sampleEvent = new SampleEvent();
  sampleEvent.setUniqueId("1.1.1.1");
  sampleEvent.setFields(mapObj);
   ...
   sampleEventRepository.save(sampleEvent);

推荐答案

SampleEvent 更改 Converter 类型后,此方法有效DocumentSampleEvent &DBObject 如下(对于SampleEventWriterConverter 类)

This is working after changing the Converter type from SampleEvent & Document to SampleEvent & DBObject as below (for SampleEventWriterConverter class)

@Component
public class SampleEventWriterConverter implements Converter<SampleEvent, DBObject> {
    @Override
    public DBObject convert(SampleEvent event) {
        DBObject doc = new BasicDBObject ();
        doc.put("_id", event.getId());
        // …
        doc.put("sample", "test");
        for (Map.Entry<String, Object> entry : event.getFields().entrySet()) {
            doc.put(entry.getKey(), entry.getValue());
        }
        return doc;
    }
}

这篇关于Spring Data mongo 自定义转换器不调用也不保存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆