1

そのため、Jongo を使用して作成し、MongoDB コレクションに保存する POJO オブジェクトがあります。

import java.util.Map;

public class MyObject {

    private String name;
    private Map<String, String> mappings;

    public MyObject() {

    }

    public MyObject(String name, Map mappings) {
        this.name = name;
        this.mappings = mappings;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Map<String, String> getMappings() {
        return mappings;
    }

    public void setMappings(Map<String, String> mappings) {
        this.mappings = mappings;
    }
}

オブジェクトを mongo に保存するためのテスト クラス:

import com.mongodb.DB;
import com.mongodb.MongoClient;
import org.jongo.Jongo;
import org.jongo.MongoCollection;

import java.net.UnknownHostException;
import java.util.HashMap;

public class NullFieldTest {

    public static void main(String[] args) throws UnknownHostException {

        DB db = new MongoClient("localhost", 27017).getDB("testDB") ;
        Jongo jongo = new Jongo(db);
        MongoCollection testCollection = jongo.getCollection("testCollection");

        MyObject objectA = new MyObject("objectA", new HashMap());
        MyObject objectB = new MyObject("objectB", null);

        testCollection.save(objectA);
        testCollection.save(objectB);

    }
}

このテストは、オブジェクトを正常に保存します。

{
    "_id" : ObjectId("543cf1a6cd8936deafcf66cf"),
    "name" : "objectA",
    "mappings" : {}
}
{
    "_id" : ObjectId("543cf1a6cd8936deafcf66d0"),
    "name" : "objectB"
}

しかし、私が本当に欲しいのは、objectB の null マッピングが次のように表示されることです。

"mappings" : null

コレクション内のフィールドが null 値を持つ可能性があることは知っていますが、これを jongo ドライバーで行う方法がわかりません。アイデアはありますか?

参考までに、私はジョンゴV1.1を使用しています

4

2 に答える 2

3

問題は解決しました。私の問題はオブジェクトのシリアル化にあり、Jackson からの注釈を追加して、null フィールドも含めました。

@JsonInclude(JsonInclude.Include.ALWAYS)
public class MyObject {

この投稿の詳細を見つけました: 値が null の場合、シリアライゼーション中にフィールドを無視するように Jackson に指示する方法は?

于 2014-10-15T12:52:11.210 に答える
0

Jongo には、null フィールドを無視する事前設定された Jackson が付属しています:

JacksonMapper.Builder を使用してカスタム Mapper を作成することで、この構成を変更できます。

Mapper mapper = new JacksonMapper.Builder().addModifier(new MapperModifier() {
    public void modify(ObjectMapper mapper) {
        mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
    }
}).build();
Jongo jongo = new Jongo(db, mapper);
于 2014-10-15T13:14:10.613 に答える