我遇到以下問題。我正在用Hibernate模板讀取我的MySQL數據庫中的記錄列表,然後我需要修改結構,所以我是JSONObject和JSONArray(使用我猜官方庫:http://www.json.org/java/)。如果我使用列表作爲服務器響應,記錄字段將被正確命名(由於使用了@JsonProperty註釋)。但是,如果我試圖從這個List元素中創建一個JSONObject,那麼我得到的所有字段都以小寫字母開頭,這打破了我的UI。以JSONObject的形式讀取對象屬性lowercased
這是用我的「任務」的模式:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
@JsonAutoDetect
@JsonIgnoreProperties(ignoreUnknown = true)
@Entity
@Table(name="tasks")
public class Task {
@Id
@GeneratedValue
@Column(name="Id")
private int Id;
@Column(name="Name", nullable=false)
private String Name;
@JsonProperty("Id")
public int getId() {
return Id;
}
@JsonProperty("Id")
public void setId(int id) {
this.Id = id;
}
@JsonProperty("Name")
public String getName() {
return Name;
}
@JsonProperty("Name")
public void setName(String name) {
this.Name = name;
}
}
,這裏是用於獲取記錄從DB(全部剝離不必要的部分)的代碼:
public List<Task> getEvents() {
DetachedCriteria criteria = DetachedCriteria.forClass(Task.class);
return hibernateTemplate.findByCriteria(criteria);
}
private static JSONArray read() throws JSONException{
List<Task> list = getEvents();
Iterator<Task> listIterator = list.iterator();
JSONArray ret = new JSONArray();
String parentId;
while(listIterator.hasNext()){
Task task = listIterator.next();
JSONObject taskJSON = new JSONObject(task);
ret.put(taskJSON);
}
}
,你可以請參閱我的服務器響應,所有字段名稱都以小寫字母開頭: {"id":18,"name":"Release"}
任何想法如何覆蓋此?
你想做什麼? –
我想要得到這樣的JSON:{「Id」:18,「Name」:「Release」}。我不能使用列表,因爲它是平坦的,我需要一棵樹,這就是爲什麼我使用JSON結構來實現這一點。 –
你爲什麼要返回一個JSONArray - 它既不是最終的字符串輸出,也不提供POJO的類型安全性?你知道'ObjectMapper'類嗎? – Dunes