MongoDB “NumberLong/$numberLong” issue while converting back to Java Object

MongoDB “NumberLong/$numberLong” issue while converting back to Java Object

I am having a json which is somethink like {“Header” : {“name” : “TestData”, “contactNumber” : 8019071740}}
If i insert this to mongoDB it will be something like
{“_id” : ObjectId(“58b7e55097989619e4ddb0bb”),”Header” : {“name” : “TestData”,”contactNumber” : NumberLong(8019071743)}
When i read this data back and try to convert to java object using Gson it throws exception com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a long but was BEGIN_OBJECT at line 1 column 109 path $.Header.contactNumber
I have found this, But i was wondering if i have very complex json structure then i might need to manipulate many json nodes in this approach.
Do anyone has any better alternatives on this.
Edit:1
I am reading querying and converting json as below
Document MongoDocument = mycollection.find(searchCondition);
String resultJson = MongoDocument.toJson();
Gson gson = new Gson();
Model model= gson.fromJson(resultJson, ItemList.class);

Solutions/Answers:

Solution 1:

Take a look at: converting Document objects in MongoDB 3 to POJOS

I had the same problem. The workaround with com.mongodb.util.JSON.serialize(document) does the trick.

Solution 2:

Mongo db uses Bson format with its own types which follows json standards but it can’t be parsed by json library without writing the custom wrapper/codec.

Related:  Is there a Comparison of NoSQL Solutions (Which is better in certain situations?)

You can use third party framework/plugins to make the library take care of converting between document and pojo.

If that is not an option for you, you will have to do mapping yourself.

Document mongoDocument = mycollection.find(searchCondition);
Model model= new Model();
model.setProperty(mongoDocument.get("property");

Solution 3:

val mongoJsonWriterSettings: JsonWriterSettings = JsonWriterSettings.builder.int64Converter((value, writer) => writer.writeNumber(value.toString)).build
def bsonToJson(document: Document): String = document toJson mongoJsonWriterSettings

Solution 4:

We can use below code:

Document doc = documentCursor.next();
JsonWriterSettings relaxed = JsonWriterSettings.builder().outputMode(JsonMode.RELAXED).build();
CustomeObject obj = gson.fromJson(doc.toJson(relaxed), CustomeObject.class);

References