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

使用JAX-RS和JAXB将JSON响应映射到对象中

段兴为
2023-03-14

我正在尝试将从远程服务获得的响应映射到对象中。对于客户端,我使用的是 JAX-RS 注释接口:

@GET
@Path("/content/example.data")
@Produces(MediaType.APPLICATION_JSON)
@Cacheable("my-data")
Items getInfo(
        @PathParam("country") String country,
        @PathParam("language") String language);

响应采用以下格式,作为对象的JSON列表:

[
  {
    "code": "01",
    "name": "Item1",
    "description": "Description for item1",
    "show": true
  },
  {
    "code": "02",
    "name": "Item2",
    "description": "Description for item2",
    "show": true
  }
]

我试图映射到的类是:

@XmlRootElement
public class Items {

    @XmlElementWrapper
    List<Item> items;

    public List<Item> getItems() {
        return items;
    }

    public void setItems(List<Item> items) {
        this.items = items;
    }

}


@XmlRootElement
public class Item {

    @XmlElement(name = "code")
    private String code;
    @XmlElement(name = "name")
    private String name;
    @XmlElement(name = "description")
    private String description;
    @XmlElement(name = "show")
    private Boolean show;

    public Item(){

    }

    //...getters/setters
}

它总是返回一个带有空项目列表的项目实例。有什么想法吗?

更新

将其更改为:

List<Item> getInfo(
            @PathParam("country") String country,
            @PathParam("language") String language);

返回ArrayList

我将响应更改为服务器上的一个对象而不是一个数组,并将接口更改为:

Item getInfo(
            @PathParam("country") String country,
            @PathParam("language") String language);

而且它完美地映射了对象,所以问题一定出在映射列表内部的对象时。


共有1个答案

桑坚成
2023-03-14
匿名用户

服务器返回一个项目对象数组。不是带有“项目”字段的Items对象。您已经设置了转换,就好像您收到了这个:

{
    "items": [
        {
            ...
        },
        {
            ...
        }
    ]
}

这里是一个带有< code>items字段的对象。注意,< code>{}括号表示对象,< code>[]表示数组。

但你得到了这个-只是一个数组:

[    
    {
        ...
    },
    {
        ...
    }
]

因此,您需要将其转换为列表

问题是转换框架无法理解您希望该数组位于项目字段中(想想Items类中有两个不同List字段的情况-它应该选择转换成哪个?)。

收到列表或数组后,手动将其设置为 Items.items

// List<Item> itemsList - received and converted automatically.
Items items = new Items();
items.setItems(itemsList);

 类似资料:
  • 问题内容: 我一直在尝试创建Jersey REST Web服务。我想从Java类接收和发出JSON对象,如下所示: 应该这样将其转换为JSON: 但是,我找不到为此的标准解决方案。似乎每个人都在实现自己的包装器 解决方案。这个要求对我来说似乎是最基本的。我不敢相信这是普遍接受的解决方案,尤其是因为Jersey确实是Java中更有趣的部分之一。 我还尝试了升级到Jackson 1.8,这仅给了我这一

  • 我在使用Jersey客户端(1.11)和JSONConfiguration时遇到了一些问题。要素映射设置为true。我的测试代码如下所示: 在服务器上: 1) 我的网络。xml的POJO映射设置为true。 2) MyFooDTO只是一个如下所示的POJO: 3) MyFooCollectionWrapper如下所示: 我已经验证了服务器在创建Json响应时没有问题。如果将响应类型设置为Strin

  • 我编写了货币转换器程序,从,映射对象并创建选定速率的简单数据集。我的程序运行得很好,直到我停止使用解析和映射对象,并用替换它。它可以很好地读取基础货币和日期,但不能读取<代码>汇率 子对象。为什么? 我的代码:类别: 类: 必须使用映射对象的类: 我试图解析和映射的示例JSON数据 我正在使用这个对象来准备对象,该对象具有一个简单的

  • 问题内容: 我已经编写了一个JAX-RS(Jersey)REST服务,该服务接受ONIX XML格式的XML消息。通常,我已经使用xjc从给定架构生成了JAXB绑定所需的所有类。总体上有500多个类,我无法对其进行修改。 现在,当我有一个JAXB映射的对象时,我需要将其存储到数据库中。我使用mongoDb,因此消息格式应为JSON。我试图将Jackson与JAXB模块一起使用,以将JAXB对象转换

  • 问题内容: 我正在尝试将JSON文件映射到类对象,然后根据新接收的JSON更新卡。 我的JSON结构是这样的 我的班级看起来像这样: 如何将JSON文件中的值映射到CardInfo类创建的对象的字段中? 更新资料 以下试用版在 ci.description上 打印为null ,是否表示从未创建该对象? 更新2 打印cardInfo给出以下内容: {$ class:FirstCard,id:1,说明

  • 假设我有这样的物体 我正在使用RestTemboard类从URL中获取json,如下所示: 之后,我想使用jackson对象映射器将json字符串转换为一个对象 将实体类作为第二个参数传递 问题是我应该如何编写ExampleJson实体来处理get-Showed json?我试过这样上课,但似乎不管用。 我得到了这样一个例外: