从ObjectId的源码中就可以看出,ObjectId被Jackson序列化后,肯定是一个json对象。
    但是我们很多时候需要的是ObjectId的hex形式,为此我们需要为ObjectId提供一个序列化器。

    1. import com.fasterxml.jackson.core.JsonGenerator;
    2. import com.fasterxml.jackson.databind.JsonSerializer;
    3. import com.fasterxml.jackson.databind.SerializerProvider;
    4. import org.bson.types.ObjectId;
    5. import java.io.IOException;
    6. /**
    7. * Jackson序列化器:ObjectId序列化器
    8. * ObjectId默认会序列化成一个Json对象,而非一个hex字符串
    9. * 所以需要专门提供一个序列化器来实现得到hex字符串的目的
    10. */
    11. public class ObjectIdSerializer extends JsonSerializer<ObjectId> {
    12. @Override
    13. public void serialize(ObjectId value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
    14. if (value == null) {
    15. gen.writeNull();
    16. } else {
    17. gen.writeString(value.toHexString());
    18. }
    19. }
    20. }