簡體   English   中英

使用JAXB批注,Jackson和Spring生成JSON

[英]Generate JSON using JAXB annotations,Jackson and Spring

我正在嘗試使用Spring 4實現REST服務。

該應用程序使用Java 7構建,並在Tomcat 7上運行。

REST方法將以JSON返回客戶對象。 該應用程序是注釋驅動的。

Customer類具有JAXB批注。 傑克遜罐子存在於課堂路徑中。 根據我的理解,Jackson將使用JAXB批注生成JSON。

客戶類別:

@XmlRootElement(name = "customer")
public class Customer {
private int id;
private String name;
private List favBookList;
@XmlAttribute
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@XmlElement
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

@XmlElementWrapper(name = "booklist")
@XmlElement(name="book")
public List getFavBookList() {
return favBookList;
}
public void setFavBookList(List favBookList) {
this.favBookList = favBookList;
}
} 

我已將REST服務類注釋為@RestController(根據Spring 4)

REST方法以JSON返回客戶對象:

@RequestMapping(value="/customer.json",produces="application/json")
public  Customer getCustomerInJSON(){
    Customer customerObj = new  Customer();
    customerObj.setId(1);
    customerObj.setName("Vijay");
    ArrayList<String> favBookList = new ArrayList<String>();
    favBookList.add("Book1");
    favBookList.add("Book2");
    customerObj.setFavBookList(favBookList);
    return customerObj;

}

當我點擊URL時,預期的結果是:

{"id":1,"booklist":{"book":["Book1","Book2"]},"name":"Vijay"} 

我得到的是:

{"id":1,"name":"Vijay","favBookList":["Book1","Book2"]}

傑克遜似乎忽略了Customer類中getFavBookList()方法上方的JAXB批注@XmlElementWrapper(name =“ booklist”)@XmlElement(name =“ book”)

我想念什么嗎?

需要指導。 謝謝。

基本上,重點是,您已經給出了xml批注,並期望得到Json輸出。

您需要找出與其xml計數器部件@xmlElementWrapper等效的Json。

此功能曾經在傑克遜1.x中起作用,但在傑克遜2.x中不起作用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM