Reputation: 3362
I can insert a POJO containing a long
field correctly using gson to a mongodb server.
But when I am de-serializing it back to the pojo using Gson I get this error:
javax.servlet.ServletException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a long but was BEGIN_OBJECT at line 1 column 171 path $.sentTime
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a long but was BEGIN_OBJECT at line 1 column 171 path $.sentTime
java.lang.IllegalStateException: Expected a long but was BEGIN_OBJECT at line 1 column 171 path $.sentTime
My mongo db document looks like this:
{
"_id" : ObjectId("57ff7c30385bb63b1c185b8e"),
"chatId" : "57f95e8e385bb61c5cf2cd18",
"sender" : "57ec1aaa0ffe16123439d52b",
"message" : "Hello Again",
"sentTime" : NumberLong("1476361264229")
}
POJO:
public class MessageSingle implements Message {
private ObjectId id;
private String chatId;
private String sender;
private String message;
private MessageType messageType;
private long sentTime;
@Override
public ObjectId getId() {
return id;
}
@Override
public void setId(ObjectId id) {
this.id = id;
}
@Override
public String getChatId() {
return chatId;
}
@Override
public void setChatId(String chatId) {
this.chatId = chatId;
}
@Override
public void setSender(String sender) {
this.sender=sender;
}
@Override
public String getSender() {
return sender;
}
@Override
public void setMessage(String message) {
this.message=message;
}
@Override
public String getMessage() {
return message;
}
@Override
public void setMessageType(MessageType messageType) {
this.messageType=messageType;
}
@Override
public MessageType getMessageType() {
return messageType;
}
@Override
public void setSentTime(long time) {
this.sentTime=time;
}
@Override
public long getSentTime() {
return sentTime;
}
}
When I change the long to int or string it works well but not with long. How do I solve the same. Thanks
Upvotes: 0
Views: 1351
Reputation: 101
JsonWriterSettings relaxed = JsonWriterSettings.builder().outputMode(JsonMode.RELAXED).build();
System.out.println("output = " + doc.toJson(relaxed));
Upvotes: 0
Reputation: 2845
It seems Mongo treats NumberLong as an object that is handled internally. I believe you will have to use a TypeAdapter, as described in this SO answer.
Another approach would be reading as string and converting, but I think of it as a last resource
Upvotes: 1