我有这个 json:{"backwards":false,"idFrom":-1}
还有一个方法:
private Object[] instantiateFromRequest(Class[] paramTypes) throws IOException {
Object[] params = new Object[paramTypes.length];
if (paramTypes.length == 0) {
return params;
}
HttpServletRequest req = RequestSupplier.request();
InputStream is = req.getInputStream();
ObjectMapper m = new ObjectMapper();
if (paramTypes.length == 1) {
params[0] = m.readValue(is, paramTypes[0]);
} else {
String[] vals = m.readValue(is, String[].class);//trouble here
for (int i = 0; i < paramTypes.length; i++) {
if (paramTypes[i] == String.class) {
params[i] = vals[i];
} else {
params[i] = m.readValue(vals[i], paramTypes[i]);
}
}
}
return params;
}
(params[0]
为 long
,params params[1]
为 boolean
)
它应该返回 json 中的对象。麻烦就在标记线上。我得到一个异常(exception):
无法从 START_OBJECT token 中反序列化 java.lang.String[] 实例
我不知道为什么会发生这种情况。有人可以帮助我吗?
编辑:实际上,我似乎正在尝试获取一个数组,而不是这里的对象。将 JSON 更改为:[-1, false]
解决了我的问题
最佳答案
问题是您正在尝试通过字符串数组进行序列化,其中 json
中有另一个泛型类型对象。
尝试以下操作:
String val = m.readValue(is, String.class);
或:
ContentBean myContentBean = m.readValue(is, ContentBean.class);
其中 ContentBean
有两个属性:
向后
idFrom
及其 getter 和 setter。
它应该可以完美地工作。
编辑:
您确定:
params[1] 为 long,params params[0] 为 boolean
因为对我来说似乎恰恰相反。 。 。
关于java - 尝试反序列化对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24738579/