我有一個非常簡單的POJO,我寫入MongoDB。然後它返回包含_id屬性作爲$ oid對象的JSON。我想寫入我的POJO,但迄今爲止失敗了。我看到很多人與它鬥爭並提出不同的解決方案,但我還沒有得到任何解決方案。可能是因爲沒有人提供確切的細節,他們實際使用的庫。有codehaus.jackson。*有com.fastxml.jackson。 ,jongo,org.mongo。,com.mongo *等
我的目標是這樣的:
package com.blueplanetsoftware.metrics.rest;
import javax.persistence.Id;
import com.fasterxml.jackson.annotation.JsonProperty;
public class MongoObject
{
@JsonProperty("_id")
private String _id;
@JsonProperty("userID")
private String userID;
@JsonProperty("appID")
private String appID;
@JsonProperty("message")
private String message = "";
@JsonProperty("session")
private String session;
public MongoObject() {}
/**
* @return the id
*/
@Id
@JsonProperty("_id")
public String getId()
{
return _id;
}
/**
* @param id the id to set
*/
@Id
@JsonProperty("_id")
public void setId(String id)
{
this._id = id;
}
}
,我找回了JSON看起來是這樣的:
{
"userID" : "aap" ,
"appID" : "noot" ,
"message" : "JSON" ,
"session" : "ea944555b5ea8ea6" ,
"_id" : { "$oid" : "5245f1063004348555e54815"}
}
當我嘗試反序列化JSON到我這個代碼類:
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
MongoObject o = mapper.readValue(response, MongoObject.class);
它給了我一個例外:
java.lang.AssertionError: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: [email protected]; line: 1, column: 93] (through reference chain: com.blueplanetsoftware.metrics.rest.MongoObject["_id"])
那麼如何讓_id/$ oid字符串進入我的_id屬性?我很驚訝,這不是一個簡單的方法來做到這一點。至少我至今還沒有找到任何東西。
我想我試過了。但是,@ObjectId來自MongoJack庫。儘管MongoJack似乎可以直接將MongoDB查詢轉換爲POJO,但我無法找到如何使用MongoJack將JSON字符串轉換爲POJO,反之亦然。由於我正在創建一個平臺和語言不可知的REST服務,因此我的REST代碼需要返回JSON字符串。在客戶端,使用Java時,我想將這些字符串轉換爲POJO。這就是_id:{$ 0id:「abc」}結構給出的麻煩。我在這裏錯過了一些微不足道的東西嗎? –
我認爲我使用的是Jongo,它非常適合查詢。 MongoJack和Jongo不一樣。在MongoJack中,你可以給JacksonDBCollection POJO來保存,但我想這仍然不能回答你的問題,因爲你仍然需要獲得POJO。在我的項目中,傑克遜數據綁定似乎正在關注事物的這一方面。如果有幫助,我會用我寫的junit測試更新我的答案。 – Trisha
謝謝Trisha,確實有效。我覺得非常好奇,因爲它沒有@ org.jongo.marshall.jackson.oid.ObjectId註解不起作用。儘管這是對Jongo的唯一參考。這是否意味着com.fasterxml.jackson.databind.ObjectMapper知道Jongo註釋?這個解決方案有一些神奇的東西,沒有任何意義。但至少它解決了我的問題,我會看看我以後能否理解它。 –