java - 尝试反序列化对象时出错

标签 java jackson

我有这个 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 有两个属性:

  1. 向后
  2. idFrom

及其 getter 和 setter。

它应该可以完美地工作。

编辑:

您确定:

params[1] 为 long,params params[0] 为 boolean

因为对我来说似乎恰恰相反。 。 。

关于java - 尝试反序列化对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24738579/

相关文章:

java - 在 NetBeans 中设置 Log4j2,基本配置

java - 再次执行操作约 4 次时,尝试从结果集大小约为 12000 行填充列表,jvm 耗尽堆内存

java - Git:将文件自动 merge 为冲突文件

json - 如何有效地同时支持 JSR-303 验证和 Jackson JSON 映射?

json - Jackson 2 错误地序列化 Java java.nio.file.Path

java - 使用 Jackson 停止接受 json 解析中枚举的序数值

java - Heroku 找不到 webapp-runner.jar

java - 一个 Flink 作业中有两个数据流

java - 如何使用 Jackson 2 将集合的子类序列化和反序列化为已知集合

java - jackson Jersey JSON