【发布时间】:2011-10-10 10:26:17
【问题描述】:
我正在尝试将 JSON 对象编组到包含通用对象以及有关对象签名的其他信息的包装类中。
public class Signable<T> {
private T object;
private String signature;
public class Signable() {
generateSignature();
}
/* Getters and setters */
}
只要我用已经创建的对象构造它,包装类就可以正常工作,并且它能够生成所需的 json
@RequestMapping(value="/test/json/return",method=RequestMethod.GET)
public @ResponseBody Signable<Cart> getTest()
{
Cart cart = new Cart();
// populate cart with OrderItems ...
Signable<Cart> sign = new Signable<Cart>();
sign.setObject(cart);
return sign;
}
能够产生预期的输出
{
"object":{
"orderItems":[
{
"id": "****",
"desc": "asdlfj",
"price": 25.53
}
]
},
"signature":"s9d94f9f9gdfg67d8678g6s87d6f7g6";
}
这是我想要的格式。但是,当尝试将 Signable 生成的相同 json 编组回 Signable 时,我收到以下错误:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to Cart
由于某种原因,它无法确定 json 中的“对象”应该映射到 Cart 的类型(它只是默认为 LinkedHashMap),即使它是在方法头中指定的。
@RequestMapping(value="/test/json/post",method=RequestMethod.POST)
public @ResponseBody Signable<Cart> postTest(@RequestBody Signable<Cart> sign)
有没有办法明确说明您想从 JSON 生成哪些类型的对象来插入代替泛型?
任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: java json spring-mvc jackson