【发布时间】:2011-11-29 08:38:21
【问题描述】:
我在尝试获取 JSON 请求并对其进行处理时收到以下错误:
org.codehaus.jackson.map.JsonMappingException: 没有找到适合类型 [simple type, class com.myweb.ApplesDO] 的构造函数:无法从 JSON 对象实例化(需要添加/启用类型信息?)
这是我要发送的 JSON:
{
"applesDO" : [
{
"apple" : "Green Apple"
},
{
"apple" : "Red Apple"
}
]
}
在Controller中,我有以下方法签名:
@RequestMapping("showApples.do")
public String getApples(@RequestBody final AllApplesDO applesRequest){
// Method Code
}
AllApplesDO 是 ApplesDO 的包装器:
public class AllApplesDO {
private List<ApplesDO> applesDO;
public List<ApplesDO> getApplesDO() {
return applesDO;
}
public void setApplesDO(List<ApplesDO> applesDO) {
this.applesDO = applesDO;
}
}
ApplesDO:
public class ApplesDO {
private String apple;
public String getApple() {
return apple;
}
public void setApple(String appl) {
this.apple = apple;
}
public ApplesDO(CustomType custom){
//constructor Code
}
}
我认为 Jackson 无法将 JSON 转换为子类的 Java 对象。请帮助杰克逊将 JSON 转换为 Java 对象的配置参数。我正在使用 Spring 框架。
编辑:在上述示例类中包含导致此问题的主要错误 - 请查看已接受的解决方案答案。
【问题讨论】:
-
我在上面的代码中没有看到任何子类,这段代码是你尝试的还是你在编一个更简单的例子?
-
我添加了一个答案,并对其工作原理进行了更多解释。基本上,您需要意识到 Java 不会在运行时保留方法参数名称。
标签: java json spring annotations jackson