Hướng dẫn codecregistry mongodb - codecregistry mongodb

Trong hướng dẫn này, bạn có thể tìm hiểu về các codec và các lớp hỗ trợ xử lý mã hóa và giải mã các đối tượng Java đến và từ dữ liệu BSON trong trình điều khiển Java MongoDB. Trừu tượng

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 cho phép bạn ánh xạ bất kỳ loại Java nào thành loại BSON tương ứng. Bạn có thể sử dụng điều này để ánh xạ các đối tượng miền của mình trực tiếp đến và từ BSON thay vì sử dụng một đối tượng dựa trên bản đồ trung gian như
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
5 hoặc
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
6.Codecs and the supporting classes that handle the encoding and decoding of Java objects to and from BSON data in the MongoDB Java driver. The
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 abstraction allows you to map any Java type to a corresponding BSON type. You can use this to map your domain objects directly to and from BSON instead of using an intermediate map-based object such as
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
5 or
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
6.

Bạn có thể tìm hiểu cách chỉ định logic mã hóa và giải mã tùy chỉnh bằng cách sử dụng các triển khai ví dụ

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 và xem trong các phần sau:

  • Codec

  • Codecregologistry

  • CodecProvider

  • Ví dụ codec tùy chỉnh

Nếu bạn đang tùy chỉnh logic mã hóa và giải mã cho các đối tượng Java cũ đơn giản (POJOS), hãy đọc hướng dẫn của chúng tôi về tùy chỉnh POJO.

Giao diện

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 chứa các phương thức trừu tượng để tuần tự hóa và giảm dần các đối tượng Java thành dữ liệu BSON. Bạn có thể xác định logic chuyển đổi của mình giữa BSON và đối tượng Java của bạn trong việc triển khai giao diện này.

Để thực hiện giao diện

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4, hãy ghi đè các phương thức trừu tượng

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

0,

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

1 và

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

2.

Phương thức

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

0 yêu cầu các tham số sau:

Loại tham số

Sự mô tả

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

4

Một thể hiện của một lớp thực hiện

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

5, một loại giao diện hiển thị các phương thức để viết tài liệu BSON. Ví dụ: triển khai

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

6 ghi vào một luồng dữ liệu nhị phân. Sử dụng thể hiện này để viết giá trị BSON của bạn bằng phương thức ghi thích hợp.

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

7

Dữ liệu mà việc triển khai của bạn mã hóa. Loại phải khớp với biến loại được gán cho triển khai của bạn.

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

8

Chứa thông tin meta về dữ liệu đối tượng Java mà nó mã hóa cho BSON bao gồm việc lưu trữ giá trị hiện tại trong bộ sưu tập MongoDB.

Phương pháp này sử dụng thể hiện

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

5 để gửi giá trị được mã hóa đến MongoDB và không trả về một giá trị.

Phương thức

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

1 trả về thể hiện đối tượng Java của bạn với giá trị từ dữ liệu BSON. Phương pháp này yêu cầu các tham số sau:

Loại tham số

Sự mô tả

Codec powerStatusCodec = codecRegistry.get(String.class);
Codec integerCodec = codecRegistry.get(Integer.class);
1

Một thể hiện của một lớp thực hiện

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

5, một loại giao diện hiển thị các phương thức để viết tài liệu BSON. Ví dụ: triển khai

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

6 ghi vào một luồng dữ liệu nhị phân. Sử dụng thể hiện này để viết giá trị BSON của bạn bằng phương thức ghi thích hợp.

Codec powerStatusCodec = codecRegistry.get(String.class);
Codec integerCodec = codecRegistry.get(Integer.class);
4

Dữ liệu mà việc triển khai của bạn mã hóa. Loại phải khớp với biến loại được gán cho triển khai của bạn.

Chứa thông tin meta về dữ liệu đối tượng Java mà nó mã hóa cho BSON bao gồm việc lưu trữ giá trị hiện tại trong bộ sưu tập MongoDB.

Phương pháp này sử dụng thể hiện

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

5 để gửi giá trị được mã hóa đến MongoDB và không trả về một giá trị.

Phương thức

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

1 trả về thể hiện đối tượng Java của bạn với giá trị từ dữ liệu BSON. Phương pháp này yêu cầu các tham số sau:

public enum PowerStatus {
ON,
OFF
}

Một thể hiện của một lớp thực hiện

Codec powerStatusCodec = codecRegistry.get(String.class);
Codec integerCodec = codecRegistry.get(Integer.class);
2, một loại giao diện hiển thị các phương thức để đọc tài liệu BSON. Ví dụ, việc triển khai
Codec powerStatusCodec = codecRegistry.get(String.class);
Codec integerCodec = codecRegistry.get(Integer.class);
3 đọc từ một luồng dữ liệu nhị phân.

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}

Chứa thông tin về dữ liệu BSON mà nó giải mã cho một đối tượng Java.CodecRegistry section of this page to see how you can include your

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4.

Phương pháp

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

2 trả về một thể hiện lớp của lớp Java vì Java không thể suy ra loại do xóa loại.

  • Codec

  • Xem các ví dụ mã sau đây cho thấy cách bạn có thể thực hiện một tùy chỉnh

    public class PowerStatusCodec implements Codec {
    @Override
    public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
    if (value != null) {
    writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
    }
    }
    @Override
    public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
    return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
    }
    @Override
    public Class getEncoderClass() {
    return PowerStatus.class;
    }
    }
    4.

  • Enum

    Codec powerStatusCodec = codecRegistry.get(String.class);
    Codec integerCodec = codecRegistry.get(Integer.class);
    7 chứa các giá trị "BẬT" và "TẮT" để biểu thị các trạng thái của một công tắc điện.

  • Lớp

    Codec powerStatusCodec = codecRegistry.get(String.class);
    Codec integerCodec = codecRegistry.get(Integer.class);
    8 thực hiện
    public class PowerStatusCodec implements Codec {
    @Override
    public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
    if (value != null) {
    writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
    }
    }
    @Override
    public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
    return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
    }
    @Override
    public Class getEncoderClass() {
    return PowerStatus.class;
    }
    }
    4 để chuyển đổi các giá trị Java
    public class MonolightCodecProvider implements CodecProvider {
    public MonolightCodecProvider() {}
    @Override
    @SuppressWarnings("unchecked")
    public Codec get(Class clazz, CodecRegistry registry) {
    if (clazz == Monolight.class) {
    return (Codec) new MonolightCodec(registry);
    }
    // return null when not a provider for the requested class
    return null;
    }
    }
    0 thành các giá trị BSON boolean tương ứng. Phương pháp

    CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

    0 chuyển đổi
    Codec powerStatusCodec = codecRegistry.get(String.class);
    Codec integerCodec = codecRegistry.get(Integer.class);
    7 thành BSON boolean và phương pháp

    CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

    1 thực hiện chuyển đổi theo hướng ngược lại.

  • Bạn có thể thêm một thể hiện của

    Codec powerStatusCodec = codecRegistry.get(String.class);
    Codec integerCodec = codecRegistry.get(Integer.class);
    8 vào
    public class MonolightCodecProvider implements CodecProvider {
    public MonolightCodecProvider() {}
    @Override
    @SuppressWarnings("unchecked")
    public Codec get(Class clazz, CodecRegistry registry) {
    if (clazz == Monolight.class) {
    return (Codec) new MonolightCodec(registry);
    }
    // return null when not a provider for the requested class
    return null;
    }
    }
    5 của bạn có chứa ánh xạ giữa loại đối tượng
    public class PowerStatusCodec implements Codec {
    @Override
    public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
    if (value != null) {
    writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
    }
    }
    @Override
    public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
    return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
    }
    @Override
    public Class getEncoderClass() {
    return PowerStatus.class;
    }
    }
    4 và đối tượng Java mà nó áp dụng. Tiếp tục đến phần Codecregistry của trang này để xem cách bạn có thể bao gồm
    public class PowerStatusCodec implements Codec {
    @Override
    public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
    if (value != null) {
    writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
    }
    }
    @Override
    public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
    return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
    }
    @Override
    public Class getEncoderClass() {
    return PowerStatus.class;
    }
    }
    4 của mình.

  • Để biết thêm thông tin về các lớp và giao diện trong phần này, hãy xem tài liệu API sau:

  • Bsonwriter

Bsonbinarywriter

  • CodecRegistry newRegistry = CodecRegistries.fromRegistries(
    CodecRegistries.fromCodecs(new MyEnumCodec()),
    MongoClientSettings.getDefaultCodecRegistry());
    3

  • CodecRegistry newRegistry = CodecRegistries.fromRegistries(
    CodecRegistries.fromCodecs(new MyEnumCodec()),
    MongoClientSettings.getDefaultCodecRegistry());
    4

  • CodecRegistry newRegistry = CodecRegistries.fromRegistries(
    CodecRegistries.fromCodecs(new MyEnumCodec()),
    MongoClientSettings.getDefaultCodecRegistry());
    5

EncoderContext

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

BsonReader

  • DecoderContext

  • BsonBinaryReader, our sample

    public class PowerStatusCodec implements Codec {
    @Override
    public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
    if (value != null) {
    writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
    }
    }
    @Override
    public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
    return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
    }
    @Override
    public Class getEncoderClass() {
    return PowerStatus.class;
    }
    }
    4 that converts certain Java strings to BSON booleans.

Một

public class MonolightCodecProvider implements CodecProvider {
public MonolightCodecProvider() {}
@Override
@SuppressWarnings("unchecked")
public Codec get(Class clazz, CodecRegistry registry) {
if (clazz == Monolight.class) {
return (Codec) new MonolightCodec(registry);
}
// return null when not a provider for the requested class
return null;
}
}
5 là một bộ sưu tập bất biến của các trường hợp
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 mã hóa và giải mã các lớp Java mà họ chỉ định. Bạn có thể sử dụng bất kỳ phương pháp nhà máy tĩnh
CodecRegistry newRegistry = CodecRegistries.fromRegistries(
CodecRegistries.fromCodecs(new MyEnumCodec()),
MongoClientSettings.getDefaultCodecRegistry());
0 nào sau đây để xây dựng
public class MonolightCodecProvider implements CodecProvider {
public MonolightCodecProvider() {}
@Override
@SuppressWarnings("unchecked")
public Codec get(Class clazz, CodecRegistry registry) {
if (clazz == Monolight.class) {
return (Codec) new MonolightCodec(registry);
}
// return null when not a provider for the requested class
return null;
}
}
5 từ các trường hợp
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 có trong các loại liên quan:

Đoạn mã sau đây cho thấy cách xây dựng

public class MonolightCodecProvider implements CodecProvider {
public MonolightCodecProvider() {}
@Override
@SuppressWarnings("unchecked")
public Codec get(Class clazz, CodecRegistry registry) {
if (clazz == Monolight.class) {
return (Codec) new MonolightCodec(registry);
}
// return null when not a provider for the requested class
return null;
}
}
5 bằng phương thức
CodecRegistry newRegistry = CodecRegistries.fromRegistries(
CodecRegistries.fromCodecs(new MyEnumCodec()),
MongoClientSettings.getDefaultCodecRegistry());
3:

Trong ví dụ trước, chúng tôi chỉ định các triển khai

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 sau:

Phương pháp

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

2 trả về một thể hiện lớp của lớp Java vì Java không thể suy ra loại do xóa loại.

  • Xem các ví dụ mã sau đây cho thấy cách bạn có thể thực hiện một tùy chỉnh

    public class PowerStatusCodec implements Codec {
    @Override
    public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
    if (value != null) {
    writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
    }
    }
    @Override
    public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
    return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
    }
    @Override
    public Class getEncoderClass() {
    return PowerStatus.class;
    }
    }
    4.

  • Enum

    Codec powerStatusCodec = codecRegistry.get(String.class);
    Codec integerCodec = codecRegistry.get(Integer.class);
    7 chứa các giá trị "BẬT" và "TẮT" để biểu thị các trạng thái của một công tắc điện.

Lớp

Codec powerStatusCodec = codecRegistry.get(String.class);
Codec integerCodec = codecRegistry.get(Integer.class);
8 thực hiện
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 để chuyển đổi các giá trị Java
public class MonolightCodecProvider implements CodecProvider {
public MonolightCodecProvider() {}
@Override
@SuppressWarnings("unchecked")
public Codec get(Class clazz, CodecRegistry registry) {
if (clazz == Monolight.class) {
return (Codec) new MonolightCodec(registry);
}
// return null when not a provider for the requested class
return null;
}
}
0 thành các giá trị BSON boolean tương ứng. Phương pháp

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

0 chuyển đổi
Codec powerStatusCodec = codecRegistry.get(String.class);
Codec integerCodec = codecRegistry.get(Integer.class);
7 thành BSON boolean và phương pháp

CodecRegistry codecRegistry = CodecRegistries.fromCodecs(new IntegerCodec(), new PowerStatusCodec());

1 thực hiện chuyển đổi theo hướng ngược lại.

Tuy nhiên, trong các trường hợp bạn thêm một lớp chứa các trường yêu cầu các đối tượng

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 tương ứng, bạn cần đảm bảo rằng bạn khởi tạo các đối tượng
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 cho các trường của lớp trước khi bạn khởi tạo
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 cho lớp. Bạn có thể sử dụng tham số
public class MonolightCodecProvider implements CodecProvider {
public MonolightCodecProvider() {}
@Override
@SuppressWarnings("unchecked")
public Codec get(Class clazz, CodecRegistry registry) {
if (clazz == Monolight.class) {
return (Codec) new MonolightCodec(registry);
}
// return null when not a provider for the requested class
return null;
}
}
5 trong phương thức
BsonTypeClassMap bsonTypeClassMap = new BsonTypeClassMap();
Class clazz = bsonTypeClassMap.get(BsonType.ARRAY);
System.out.println("Java type: " + clazz.getName());
7 để vượt qua bất kỳ trường hợp
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 nào mà
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 dựa vào.

Ví dụ mã sau đây cho thấy cách bạn có thể triển khai

BsonTypeClassMap bsonTypeClassMap = new BsonTypeClassMap();
Class clazz = bsonTypeClassMap.get(BsonType.ARRAY);
System.out.println("Java type: " + clazz.getName());
9 để vượt qua
Map> replacements = new HashMap>();
replacements.put(BsonType.ARRAY, Set.class);
BsonTypeClassMap bsonTypeClassMap = new BsonTypeClassMap(replacements);
Class clazz = bsonTypeClassMap.get(BsonType.ARRAY);
System.out.println("Java type: " + clazz.getName());
3 bất kỳ trường hợp
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 nào mà nó cần trong một ví dụ
public class MonolightCodecProvider implements CodecProvider {
public MonolightCodecProvider() {}
@Override
@SuppressWarnings("unchecked")
public Codec get(Class clazz, CodecRegistry registry) {
if (clazz == Monolight.class) {
return (Codec) new MonolightCodec(registry);
}
// return null when not a provider for the requested class
return null;
}
}
5 như
Codec powerStatusCodec = codecRegistry.get(String.class);
Codec integerCodec = codecRegistry.get(Integer.class);
8 từ ví dụ trước của chúng tôi:

public class MonolightCodecProvider implements CodecProvider {
public MonolightCodecProvider() {}
@Override
@SuppressWarnings("unchecked")
public Codec get(Class clazz, CodecRegistry registry) {
if (clazz == Monolight.class) {
return (Codec) new MonolightCodec(registry);
}
// return null when not a provider for the requested class
return null;
}
}

Để xem một ví dụ có thể chạy được thể hiện các hoạt động đọc và ghi bằng các lớp

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 này, hãy xem phần ví dụ Codec tùy chỉnh của hướng dẫn này.Custom Codec Example section of this guide.

Khi làm việc với POJOS, hãy xem xét sử dụng

Map> replacements = new HashMap>();
replacements.put(BsonType.ARRAY, Set.class);
BsonTypeClassMap bsonTypeClassMap = new BsonTypeClassMap(replacements);
Class clazz = bsonTypeClassMap.get(BsonType.ARRAY);
System.out.println("Java type: " + clazz.getName());
8 để giảm thiểu mã trùng lặp để chuyển đổi các loại dữ liệu được sử dụng phổ biến và tùy chỉnh hành vi của chúng. Xem Hướng dẫn tùy chỉnh POJO của chúng tôi để biết thêm thông tin.

Đăng ký codec mặc định là một tập hợp các lớp

BsonTypeClassMap bsonTypeClassMap = new BsonTypeClassMap();
Class clazz = bsonTypeClassMap.get(BsonType.ARRAY);
System.out.println("Java type: " + clazz.getName());
9 chỉ định chuyển đổi giữa các loại Java và MongoDB thường được sử dụng. Trình điều khiển tự động sử dụng sổ đăng ký codec mặc định trừ khi bạn chỉ định một loại khác.

Nếu bạn cần ghi đè hành vi của một hoặc nhiều lớp

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4, nhưng giữ hành vi từ Cơ quan đăng ký codec mặc định cho các lớp khác, bạn có thể chỉ định tất cả các thông tin đăng ký theo thứ tự ưu tiên. Ví dụ: giả sử bạn muốn ghi đè hành vi của nhà cung cấp mặc định của
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 cho các loại enum với tùy chỉnh
public class Monolight {
private PowerStatus powerStatus = PowerStatus.OFF;
private Integer colorTemperature;
public Monolight() {}
// ...
2 của bạn, bạn phải thêm nó vào danh sách đăng ký trước khi đăng ký codec mặc định như trong ví dụ dưới đây:

CodecRegistry newRegistry = CodecRegistries.fromRegistries(
CodecRegistries.fromCodecs(new MyEnumCodec()),
MongoClientSettings.getDefaultCodecRegistry());

Để biết thêm thông tin về các lớp và giao diện trong phần này, hãy xem các phần tài liệu API sau:

  • CodecProvider

  • Đăng ký codec mặc định

Lớp

public class Monolight {
private PowerStatus powerStatus = PowerStatus.OFF;
private Integer colorTemperature;
public Monolight() {}
// ...
3 chứa ánh xạ được đề xuất giữa các loại BSON và Java. Bạn có thể sử dụng lớp này trong tùy chỉnh
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 hoặc
BsonTypeClassMap bsonTypeClassMap = new BsonTypeClassMap();
Class clazz = bsonTypeClassMap.get(BsonType.ARRAY);
System.out.println("Java type: " + clazz.getName());
9 để giúp bạn quản lý loại Java nào để giải mã các loại BSON của bạn thành các lớp container triển khai
public class Monolight {
private PowerStatus powerStatus = PowerStatus.OFF;
private Integer colorTemperature;
public Monolight() {}
// ...
6 hoặc
public class Monolight {
private PowerStatus powerStatus = PowerStatus.OFF;
private Integer colorTemperature;
public Monolight() {}
// ...
7 như lớp
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
5.

Bạn có thể thêm hoặc sửa đổi ánh xạ mặc định

public class Monolight {
private PowerStatus powerStatus = PowerStatus.OFF;
private Integer colorTemperature;
public Monolight() {}
// ...
3 bằng cách truyền một
public class Monolight {
private PowerStatus powerStatus = PowerStatus.OFF;
private Integer colorTemperature;
public Monolight() {}
// ...
7 chứa các mục nhập mới hoặc thay thế.

Đoạn mã sau cho thấy cách bạn có thể truy xuất loại lớp Java tương ứng với loại BSON trong phiên bản

public class Monolight {
private PowerStatus powerStatus = PowerStatus.OFF;
private Integer colorTemperature;
public Monolight() {}
// ...
3 mặc định:

BsonTypeClassMap bsonTypeClassMap = new BsonTypeClassMap();
Class clazz = bsonTypeClassMap.get(BsonType.ARRAY);
System.out.println("Java type: " + clazz.getName());

Mã này xuất ra như sau:

Java type: java.util.List

Bạn có thể sửa đổi các ánh xạ này trong thể hiện của mình bằng cách chỉ định thay thế trong hàm tạo

public class Monolight {
private PowerStatus powerStatus = PowerStatus.OFF;
private Integer colorTemperature;
public Monolight() {}
// ...
3. Đoạn mã sau đây cho thấy cách bạn có thể thay thế ánh xạ cho
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
03 trong phiên bản
public class Monolight {
private PowerStatus powerStatus = PowerStatus.OFF;
private Integer colorTemperature;
public Monolight() {}
// ...
3 của bạn bằng lớp
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
05:

Map> replacements = new HashMap>();
replacements.put(BsonType.ARRAY, Set.class);
BsonTypeClassMap bsonTypeClassMap = new BsonTypeClassMap(replacements);
Class clazz = bsonTypeClassMap.get(BsonType.ARRAY);
System.out.println("Java type: " + clazz.getName());

Mã này xuất ra như sau:

Bạn có thể sửa đổi các ánh xạ này trong thể hiện của mình bằng cách chỉ định thay thế trong hàm tạo

public class Monolight {
private PowerStatus powerStatus = PowerStatus.OFF;
private Integer colorTemperature;
public Monolight() {}
// ...
3. Đoạn mã sau đây cho thấy cách bạn có thể thay thế ánh xạ cho
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
03 trong phiên bản
public class Monolight {
private PowerStatus powerStatus = PowerStatus.OFF;
private Integer colorTemperature;
public Monolight() {}
// ...
3 của bạn bằng lớp
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
05:BsonTypeClassMap API Documentation.

Để biết danh sách đầy đủ các ánh xạ mặc định, hãy tham khảo tài liệu API BSONTYPECLASSMAP.

  • Để biết ví dụ về cách lớp

    public class PowerStatusCodec implements Codec {
    @Override
    public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
    if (value != null) {
    writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
    }
    }
    @Override
    public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
    return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
    }
    @Override
    public Class getEncoderClass() {
    return PowerStatus.class;
    }
    }
    5 sử dụng
    public class Monolight {
    private PowerStatus powerStatus = PowerStatus.OFF;
    private Integer colorTemperature;
    public Monolight() {}
    // ...
    3, hãy xem mã nguồn trình điều khiển cho các lớp sau:

  • DocumentCodecProvider

DocumentCodec

Trong phần này, chúng tôi chỉ ra cách bạn có thể triển khai

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 và
BsonTypeClassMap bsonTypeClassMap = new BsonTypeClassMap();
Class clazz = bsonTypeClassMap.get(BsonType.ARRAY);
System.out.println("Java type: " + clazz.getName());
9 để xác định logic mã hóa và giải mã cho lớp Java tùy chỉnh. Chúng tôi cũng chỉ ra cách bạn có thể chỉ định và sử dụng các triển khai tùy chỉnh của mình để thực hiện các hoạt động chèn và truy xuất.

public class Monolight {
private PowerStatus powerStatus = PowerStatus.OFF;
private Integer colorTemperature;
public Monolight() {}
// ...

Đoạn mã sau đây hiển thị lớp tùy chỉnh ví dụ của chúng tôi được gọi là

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
10 và các trường của nó mà chúng tôi muốn lưu trữ và lấy từ bộ sưu tập MongoDB:

  • Lớp này chứa các trường sau, mỗi trường chúng ta cần gán một

    public class PowerStatusCodec implements Codec {
    @Override
    public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
    if (value != null) {
    writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
    }
    }
    @Override
    public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
    return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
    }
    @Override
    public Class getEncoderClass() {
    return PowerStatus.class;
    }
    }
    4:PowerStatusCodec that converts specific enum values to BSON booleans.

  • public class PowerStatusCodec implements Codec {
    @Override
    public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
    if (value != null) {
    writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
    }
    }
    @Override
    public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
    return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
    }
    @Override
    public Class getEncoderClass() {
    return PowerStatus.class;
    }
    }
    12 mô tả liệu ánh sáng có được bật "BẬT" hoặc "TẮT" mà chúng tôi sử dụng powerstatuscodec chuyển đổi các giá trị enum cụ thể thành boleans BSON.

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
13 mô tả màu của ánh sáng và chứa giá trị
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
14 mà chúng tôi sử dụng
BsonTypeClassMap bsonTypeClassMap = new BsonTypeClassMap();
Class clazz = bsonTypeClassMap.get(BsonType.ARRAY);
System.out.println("Java type: " + clazz.getName());
0 có trong thư viện BSON.

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
0

Ví dụ mã sau đây cho thấy cách chúng ta có thể triển khai

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 cho lớp
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
10. Lưu ý rằng hàm tạo mong đợi một thể hiện là
public class MonolightCodecProvider implements CodecProvider {
public MonolightCodecProvider() {}
@Override
@SuppressWarnings("unchecked")
public Codec get(Class clazz, CodecRegistry registry) {
if (clazz == Monolight.class) {
return (Codec) new MonolightCodec(registry);
}
// return null when not a provider for the requested class
return null;
}
}
5 mà từ đó nó truy xuất các trường hợp
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 mà nó cần để mã hóa và giải mã các trường của nó:

public class MonolightCodecProvider implements CodecProvider {
public MonolightCodecProvider() {}
@Override
@SuppressWarnings("unchecked")
public Codec get(Class clazz, CodecRegistry registry) {
if (clazz == Monolight.class) {
return (Codec) new MonolightCodec(registry);
}
// return null when not a provider for the requested class
return null;
}
}

Để đảm bảo chúng tôi thực hiện các phiên bản

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
4 cho các trường có sẵn cho
public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
10, chúng tôi thực hiện một tùy chỉnh
BsonTypeClassMap bsonTypeClassMap = new BsonTypeClassMap();
Class clazz = bsonTypeClassMap.get(BsonType.ARRAY);
System.out.println("Java type: " + clazz.getName());
9 được hiển thị trong ví dụ mã sau:

  • Sau khi xác định logic chuyển đổi, chúng tôi có thể thực hiện các mục sau:

  • Lưu trữ dữ liệu từ các trường hợp

    public class PowerStatusCodec implements Codec {
    @Override
    public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
    if (value != null) {
    writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
    }
    }
    @Override
    public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
    return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
    }
    @Override
    public Class getEncoderClass() {
    return PowerStatus.class;
    }
    }
    10 vào MongoDB

Lấy dữ liệu từ MongoDB vào các trường hợp

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
10

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
2

Nếu bạn chạy ví dụ trước, bạn sẽ thấy đầu ra sau:

public class PowerStatusCodec implements Codec {
@Override
public void encode(BsonWriter writer, PowerStatus value, EncoderContext encoderContext) {
if (value != null) {
writer.writeBoolean(value.equals(PowerStatus.ON) ? Boolean.TRUE : Boolean.FALSE);
}
}
@Override
public PowerStatus decode(BsonReader reader, DecoderContext decoderContext) {
return reader.readBoolean() ? PowerStatus.ON : PowerStatus.OFF;
}
@Override
public Class getEncoderClass() {
return PowerStatus.class;
}
}
3

Để biết thêm thông tin về các phương thức và lớp được đề cập trong phần này, hãy xem tài liệu API sau:

  • withCodecRegistry()

  • MongoClientSettings.getDefaultCodecRegistry()

  • Codec

  • CodecProvider