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

我在使用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参数。

以上是 将对象的JSON数组映射到@RequestBody列表 使用杰克逊 的全部内容, 来源链接: utcz.com/qa/401836.html

回到顶部