当前位置: 首页 > 知识库问答 >
问题:

使用JAXB注释、Jackson和Spring生成JSON

后星河
2023-03-14

我正在尝试使用Spring 4实现REST服务。

该应用程序使用Java 7构建,并在Tomcat 7上运行。

REST方法将返回JSON格式的customer对象。应用程序是注释驱动的。

Customer类有JAXB注释。Jackson罐子出现在课堂路径中。据我所知,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中的customer对象:

@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"]}

Jackson似乎忽略了Customer类中getFavBookList()方法上面的JAXB注释@XmlElementWrapper(name="booklist")和@XmlElement(name="book")

我错过什么了吗?

需要指导。谢谢。

共有1个答案

郎鸿雪
2023-03-14

基本上,重点是,您已经给出了xml注释,并且期望Json输出。

您需要找出其xml计数器部分的Json等价物@xmlementwrapper

这项功能曾在jackson 1中使用。x,但在Jackson 2中没有。十、

 类似资料:
  • 如何使用杰克逊序列化此类 Jackson没有拾取@XmlElementWrapper@XmlSee还有注释,Jackson也没有映射@XmlRootElement注释。我使用的是Jackson 1.9.0。Jackson正在将元素放入列表中,但没有映射POJO类的根元素。 这里是示例方法。 它生成的响应是'{“response”:{“status”:0,“PBBeans”:[{“user_name

  • 手工编写类和从scheme生成JAXB类的优缺点是什么。我开始新的项目,并希望了解如何选择避免陷阱。 我有复杂的XML结构(基本上是FreeSwitch配置定义),包括不同XML级别上的可重复类型。

  • 问题内容: 我正在尝试编写一个可以接受XML或JSON输入并分别输出JSON或XML的代码。即,如果我提供XML,则应返回JSON,如果我提供JSON,则应返回XML输出。 有人告诉我使用Jackson API和JAXB注释是可能的。谁能帮我这个忙吗? 问题答案: 注意: 我是 EclipseLink JAXB(MOXy)的 负责人,并且是 JAXB(JSR-222) 专家组的成员。 下面是一个示

  • 我一直在使用 annox 在我的 jaxb 生成的类上添加注释(通过绑定文件),但我找不到直接在包上添加注释的方法(包信息.java)。 我一直在尝试在bindings.xml中这样做: 但是jaxb抱怨说< code>annox:annotate不应该在那里。 还有别的方法吗?

  • JAXB为每个属性生成@XmlAttribute注释。例如,属性 转换为带注释的java对象属性 但是,如果属性在名称中没有下划线,则@Xml属性中的名称字段丢失(因此##默认)。我想自定义JAXB绑定,以便也生成没有下划线的名称的注释。有什么建议吗? 谢谢!Johannes