Tho*_*ley 18 spring json hibernate jackson
我在使用Jackson映射Javascript发布的JSON哈希数组(Tag)时遇到了问题.
这是控制器@RequestBody收到的数据(使用正确的json请求头发送):
[{name=tag1}, {name=tag2}, {name=tag3}]
Run Code Online (Sandbox Code Playgroud)
这是控制器:
@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);
}
Run Code Online (Sandbox Code Playgroud)
当我调试并查看"实体"值时,它显示为通用对象的ArrayList,而不是像我期望的那样"Tag"类型的对象列表.
如何让jackson将传递的对象数组映射到"Tag"类型的obejcts列表?
谢谢
Sta*_*Man 40
听起来Spring并没有因为某种原因传递完整的类型信息,而是一个类型擦除的版本,就好像声明是这样的List<?> tag.我不知道可以做些什么来完全解决这个问题(可能需要来自Spring集成团队的东西),但是一个解决方法就是定义你自己的类型:
static class TagList extends ArrayList<Tag> { }
Run Code Online (Sandbox Code Playgroud)
并使用它.这将通过超类型声明保留泛型参数化,这样即使Spring只通过等效的TagList.class,Jackson也可以找出Tag参数.
小智 17
另一种方法是获取一个数组而不是List,如下所示:
@RequestBody Tag[] entities
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71487 次 |
| 最近记录: |