我在尝试获取JSON请求并处理它时收到以下错误:
org.codehaus.jackson.map.JsonMappingException:找不到类型[simple type,class com.myweb.ApplesDO]的合适构造函数:无法从JSON对象实例化(需要添加/启用类型信息?)
这是我要发送的JSON:
{
"applesDO" : [
{
"apple" : "Green Apple"
},
{
"apple" : "Red Apple"
}
]
}
Run Code Online (Sandbox Code Playgroud)
在Controller中,我有以下方法签名:
@RequestMapping("showApples.do")
public String getApples(@RequestBody final AllApplesDO applesRequest){
// Method Code
}
Run Code Online (Sandbox Code Playgroud)
AllApplesDO是ApplesDO的包装器:
public class AllApplesDO {
private List<ApplesDO> applesDO;
public List<ApplesDO> getApplesDO() {
return applesDO;
}
public void setApplesDO(List<ApplesDO> applesDO) {
this.applesDO = applesDO;
}
}
Run Code Online (Sandbox Code Playgroud)
ApplesDO:
public class ApplesDO {
private String apple;
public String getApple() {
return apple;
}
public void setApple(String appl) { …
Run Code Online (Sandbox Code Playgroud) 我在使用Jackson反序列化JSON字符串时遇到问题(但我将对象序列化为JSON没有问题).
下面我介绍我使用的课程.当我接收一个JSON字符串(一个在其他地方序列化并通过webservice检索的ProtocolContainer)并希望对其进行反序列化时,问题就出现了:
JSON字符串:
{ "DataPacketJSONString":NULL, "DataPacketType": "MyPackage.DataPackets.LoginRequestReply", "的MessageId":6604, "SenderUsername":NULL, "子分组":{ "__类型": "LoginRequestReply:#MyPackage.DataPackets","原因":"错误的传递或用户名","成功":false,"用户名":"用户1"}}
我试着像这样反序列化:
ProtocolContainer ret = ProtocolContainer.Create(jsonString);
Run Code Online (Sandbox Code Playgroud)
并且可以在下面看到在ProtocolContainer中执行的代码.例外:
org.codehaus.jackson.map.JsonMappingException:找不到类型[simple type,class MyPackage.ProtocolContainer]的合适构造函数:无法在[Source:java.io.]中从JSON对象实例化(需要添加/启用类型信息?). StringReader @ 4059dcb0; line:1,column:2]
我真的很感激这里的一些输入=)Thx!
ProtocolContainer.java - 封装我的"SubPackets"的容器类:
import java.io.IOException;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import MyPackage.DataPackets.*;
public class ProtocolContainer
{
public String SenderUsername;
public String DataPacketType;
public long MessageId;
public String DataPacketJSONString;
public DataPacket SubPacket;
public ProtocolContainer(DataPacket dp)
{
DataPacketType = dp.getClass().toString().substring(6);
SubPacket = dp;
}
public String toJSON()
{
try {
if (SubPacket != …
Run Code Online (Sandbox Code Playgroud)