2017-02-08 11 views
1

내 응용 프로그램에서 mongo-java-driver를 사용하여 mongodb에 데이터를 읽고 씁니다.mongodb-java-driver에 내장 된 문서 용 코덱 쓰기

내가 이런 식으로 수업을 -

public class CCodec implements Codec<C> { 

    private Codec<Document> documentCodec; 

    public CCodec(CodecRegistry registry) { 
     documentCodec = registry.get(Document.class); 
    } 

    @Override 
    public void encode(BsonWriter writer, C c, EncoderContext context)  { 
     Document document = new Document(); 
     document.put("c",c.getC()); 
     document.put("b",c.getB()); 
     documentCodec.encode(writer, document, context); 
    } 
} 

코덱 클래스 B에 대한 - -이 같은 클래스 C에 대한 코덱을 만든

public A{ 
    private String a; 
    //Getters & Setters 
} 

public class B{ 
    private String b; 
    private List<A> a; 
    //Getters & Setters 
} 

public class C{ 
    private String c; 
    private B b; 
    //Getters & Setters 
} 

public class BCodec implements Codec<B> { 

     private Codec<Document> documentCodec; 

     public CCodec(CodecRegistry registry) { 
      documentCodec = registry.get(Document.class); 
     } 

     @Override 
     public void encode(BsonWriter writer, B b, EncoderContext context)  { 
      writer.writeStartDocument(); 
      writer.writeString("b",b.getB()); 
      //How to encode A Here 
      writer.writeEndDocument(); 
     } 
    } 

그럴 수 없어 내가 말 할 때 내가 CCodec에했던 것처럼 BCodec에서 인코딩을 수행한다.

그것은 새 문서를 생성하지만 난 wan't

Document document = new Document(); 
은 이제 문제는 내가 B 클래스 형식 목록 필드를 인코딩 할 방법이다 문서 C.

에 포함 된 것으로? BCodec 클래스의 encode 메서드를 참조하십시오. 말할 필요도없이 CodecProvider에 모든 코덱을 추가했습니다.

도움을 주시면 감사하겠습니다.

답변

1

당신은 다음과 같이 DocumentCodec.encode 방법을 사용하여 시도 할 수 있습니다 -

@Override 
public void encode(BsonWriter writer, B b, EncoderContext context) { 
    org.bson.Document bsonDocument = new org.bson.Document(); 
    List<A> a = B.getA(); 
    bsonDocument.put("a", a); 
    ... 
    documentCodec.encode(writer, bsonDocument, encoderContext); 
} 

을하고 decode 등 :

@Override 
public B decode(BsonReader reader, DecoderContext decoderContext) { 
    org.bson.Document bsonDocument = documentCodec.decode(reader, decoderContext); 
    B b = new B(); 
    b.setA((List)bsonDocument.getString("a")); 
    ... 
    return b; 
} 
+0

어떻게 내가 위에 쓴 것과 다른? –

+0

@RaviKumar ** // 코드를 인코딩하는 방법 ** 코드에서 응답 된 내용입니다. * B 클래스의 List 타입의 필드를 어떻게 인코딩합니까? *는 인코딩 된 'A'를 'B'를 디코딩하는 동안리스트에 캐스팅 한 것입니다. – nullpointer