当前位置: 首页 > 面试题库 >

将对象的JSON数组映射到@RequestBody列表 使用杰克逊

有德业
2023-03-14
问题内容

我在使用Jackson映射Javascript发布的哈希表(标记)数组时遇到问题。

这是控制器@RequestBody接收到的数据(以正确的json requestheader发送):

[{name=tag1}, {name=tag2}, {name=tag3}]

这是控制器:

@RequestMapping(value = "purchases/{purchaseId}/tags", method = RequestMethod.POST, params = "manyTags")
@ResponseStatus(HttpStatus.CREATED)
public void createAll(@PathVariable("purchaseId") final Long purchaseId, @RequestBody final List<Tag> entities)
{
        Purchase purchase = purchaseService.getById(purchaseId);

        Set<Tag> tags = purchase.getTags();
        purchaseService.updatePurchase(purchase);
    }

当我调试并查看“实体”值时,它显示为通用对象的ArrayList,而不是我期望的“标签”类型的对象列表。

我如何让杰克逊将传递的对象数组映射到“标签”类型的对象列表?

谢谢


问题答案:

听起来好像Spring出于某种原因没有传递完整的类型信息,而是传递了一个类型擦除的版本,好像声明是类似的List<?> tag。我不知道如何解决才能完全解决这个问题(可能需要Spring集成团队的帮助),但是一种解决方法是定义自己的类型,例如:

static class TagList extends ArrayList<Tag> { }

并改用它。这将通过超类型声明保留泛型参数化,因此,即使Spring仅通过TagList.class,也可以通过Jackson找出该Tag参数。



 类似资料:
  • POJO类: 控制器: JSON请求: 问题: 当我处理请求时,我收到一个空的TransactionDto对象。 System.out.println(transactionDto) TransactionDto(id=null,userName=null,apiKey=null,amount=0,accountNumber=null,expirationDate=null,cscCode=nul

  • 问题内容: 我们有一张有很多列的大桌子。移至MySQL Cluster后,由于以下原因无法创建表: 错误1118(42000):行大小太大。不包括BLOB在内的已使用表类型的最大行大小为14000。这包括存储开销,请查阅手册。您必须将某些列更改为TEXT或BLOB 举个例子: 这是用于存储配置参数的表。我在想,我们可以将一些列合并为一个列,并将其存储为JSON对象,然后将其转换为Java对象。 例

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

  • 下面是我的DTO。 源DTO 目标DTO

  • 给定: 我想把所有的车都标出来。将轮胎分为单独的轮胎板。我知道我可以做一个

  • 问题内容: 使用以下代码,我已将列表转换为json,但格式如下: 但我想将其转换为: 以下是我的弹簧控制器: 问题答案: 更改从返回结果给放: 如此; 更新 您可以将结果作为字符串返回,您将获得所需的内容: 返回的字符串是json格式。