从ObjectId的源码中就可以看出,ObjectId被Jackson序列化后,肯定是一个json对象。
但是我们很多时候需要的是ObjectId的hex形式,为此我们需要为ObjectId提供一个序列化器。
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.bson.types.ObjectId;
import java.io.IOException;
/**
* Jackson序列化器:ObjectId序列化器
* ObjectId默认会序列化成一个Json对象,而非一个hex字符串
* 所以需要专门提供一个序列化器来实现得到hex字符串的目的
*/
public class ObjectIdSerializer extends JsonSerializer<ObjectId> {
@Override
public void serialize(ObjectId value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value == null) {
gen.writeNull();
} else {
gen.writeString(value.toHexString());
}
}
}