json - 使用 jackson 将 JSON 对象数组映射到 @RequestBody List

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


这是 Controller @RequestBody 接收到的数据(使用正确的json requestheader 发送):

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


这是 Controller :

@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,而不是我期望的“标签”类型的对象列表。

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

谢谢

最佳答案

听起来 Spring 出于某种原因没有传递完整的类型信息,而是一个类型删除的版本,好像声明类似于 List<?> tag .我不知道可以做些什么来完全解决这个问题(可能需要 Spring 集成团队提供的东西),但一种解决方法是定义您自己的类型,例如:

static class TagList extends ArrayList<Tag> { }

并改用它。这将通过父类(super class)型声明保留泛型参数化,因此即使 Spring 仅通过等效的 TagList.class , jackson 可以算出Tag参数。

关于json - 使用 jackson 将 JSON 对象数组映射到 @RequestBody List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10864049/

相关文章:

spring - 由于标准 header ,CORS 预检请求失败

java - 在 Spring Boot 应用程序中安排任务的最佳方法是什么

java - Spring MVC - AngularJS - 文件上传 - org.apache.

spring - 在 spring 上下文中定义一个字符串

java - 避免来自 swagger api 的默认基本错误 Controller

java - 当前没有 session 绑定(bind)到执行上下文

java - 在 Spring MVC 中将 ContextLoaderListener 添加到 w

java - 如何强制 Spring 容器不返回 bean 的单例实例?

java - spring-beans.xsd 没有定义 "local"。为什么?

java - 包内所有方法的@AspectJ 切入点