package com.cabletech.mongodb.bson;
/**
* Created by liyong on 2016/8/23.
*/
import com.cabletech.sco.common.IdGenerator;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
/**
* Created by alexb on 12/05/15.
*/
public class MongoObjectIdTypeAdapter extends TypeAdapter<String> {
/**
*
*/
/**
* @param writer
* @param value
* @throws IOException
*/
@Override
public void write(final JsonWriter writer, final String value) throws IOException {
if (value == null) {
writer.value(IdGenerator.nextId());
} else{
/*writer.beginObject();
writer.name("$oid").value(value);
writer.endObject();*/
writer.value(value);
}
}
/**
* @param reader
* @return
* @throws IOException
*/
@Override
public String read(final JsonReader reader) throws IOException {
JsonToken token = reader.peek();
String result = "";
if (token == JsonToken.NULL) {
reader.nextNull();
return null;
}
if (token == JsonToken.BEGIN_OBJECT) {
reader.beginObject();
try {
String tag = reader.nextName();
if (tag.equals("$oid")) {
result = reader.nextString();
}
} finally {
reader.endObject();
}
} else if (token == JsonToken.STRING) {
result = reader.nextString();
}
return result;
}
}
如果使用gson将document直接转换为实体时,可在实体对应的id属性上加注解
@JsonAdapter(MongoObjectIdTypeAdapter.class)
实质就是自定义了gson的类型转换适配
参考
https://gist.github.com/stump201/793f2d2dcec415aa60d9