>

단순한 자바 타입이 있습니다

public class Type1_ {
    private int number1;
    private int number2;
    public Type1_(int number1, int number2) {
        this.number1 = number1;
        this.number2 = number2;
    }
    public int getNumber1() {
        return number1;
    }
    public int getNumber2() {
        return number2;
    }
    @Override
    public String toString() {
        return "Type1_{number1=" + number1 + ", number2=" + number2 + '}';
    }
    public static Type1_ random() {
        return new Type1_(new SecureRandom().nextInt(), new SecureRandom().nextInt());
    }
}

간단한 Codec<Type1_> 를 만들었습니다  이 유형의 경우 (로거가 언제 또는 사용 중인지 알 수 있음)

public class Type1_Codec implements Codec<Type1_> {
    @Override
    public Type1_ decode(BsonReader reader, DecoderContext decoderContext) {
        reader.readStartDocument();
        final int number1 = reader.readInt32("number1");
        final int number2 = reader.readInt32("number2");
        reader.readEndDocument();
        final Type1_ type1_ = new Type1_(number1, number2);
        APP_LOGGER.debug(type1_);
        return type1_;
    }
    @Override
    public void encode(BsonWriter writer, Type1_ value, EncoderContext encoderContext) {
        writer.writeStartDocument();
        writer.writeInt32("number1", value.getNumber1());
        writer.writeInt32("number2", value.getNumber2());
        writer.writeEndDocument();
        APP_LOGGER.debug(value);
    }
    @Override
    public Class<Type1_> getEncoderClass() {
        return Type1_.class;
    }
}

MongoClient 에서 사용할 코덱을 레지스트리에 추가

public class CustomCodecRegistriesFactory {
    public static CodecRegistry getDefault() {
        return MongoClientSettings.getDefaultCodecRegistry();
    }
    public static CodecRegistry getDefaultWithType1_() {
        return CodecRegistries.fromRegistries(CodecRegistries.fromCodecs(new Type1_Codec()), getDefault());
    }
}
public class MongoDBClientConfig {    
    public static MongoClient buildMongoClientWithCustomCodec(final CodecRegistry codecRegistry) {
        return MongoClients.create(MongoClientSettings.builder()
                .applyToClusterSettings(builder -> {
                    builder.hosts(Arrays.asList(new ServerAddress(url(), port())));
                })
                .codecRegistry(codecRegistry)
                .build());
    }
}

Type1_Codec 에서 코덱 레지스트리를 사용하는 테스트 작성   Type1_ 가 포함되어 삽입 (인코딩) 및 읽기 (디코딩) 시도  

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class Codecs {
    @Test
    public void demonstrate_simpleCustomCodec() {
        final MongoClient mongoClient = buildMongoClientWithCustomCodec(CustomCodecRegistriesFactory.getDefaultWithType1_());
        final MongoDatabase db = mongoClient.getDatabase("db_" + new SecureRandom().nextInt(Integer.MAX_VALUE));
        final String collectionName = "col1";
        db.createCollection(collectionName);
        final MongoCollection<Document> col1 = db.getCollection(collectionName);
        int idCounter = 0;
        final String type1_field = "type1_";
        printTitle("Inserting Documents");
        for (int i = 0; i < 10; i++) {
            /*Encoding is done at insertion*/
            col1.insertOne(new Document(ID, idCounter++).append(type1_field, Type1_.random()));
        }
        printDocumentMongoCollection(col1);
        printMongoCollectionJackson(col1);
        printTitle("Attempting Decoding");
        /*attempt decoding*/
//        final Type1_ type1_value = col1.find().first().get(type1_field, Type1_.class);
//        System.out.println(type1_value);
    }
}

디코딩 부분에 문제가 있습니다. 특정 문서가 Type1_ 로 디코딩되도록 MongoClient에 대해 어떻게 지정합니까?  유형?

주석 처리 된 코드는 Document 를 전송하려고 시도합니다.   Type1_ 로  실패 할 것이다.


  • 이전 Azure Managed Identity Directory 제공 ReadAll
  • 다음 subset - 텍스트 파일에서 Sas 데이터 단계 유지 명령문