首页 > 解决方案 > “errorMessage”:“java.lang.Integer 不能转换为 java.lang.Double”

问题描述

我在这里有这段代码要部署在 AWS 上。我在 AWS 上的测试问题如下:

当我将值传递给 x 时,如下所示:

"x": 1.0 or "x": 100.0 ....etc (小数部分为零) 它被视为整数并且错误说 "errorMessage": "java.lang.Integer cannot be cast to java.lang.Double"在这一行 x_Ptr[i] = str.get(i).doubleValue();

如果 x 通过像 "x": 1.5 或 "x":0.444 这样的分数,它可以工作

这里有什么建议吗?

public class Handler implements RequestHandler<Map<String, Object>, ApiGatewayResponse> {
    private static final Logger LOG = Logger.getLogger(Handler.class);

    @Override
    public ApiGatewayResponse handleRequest(Map<String, Object> event, Context context) {
        LOG.info("received: " + event);

        List<Double> str = new ArrayList<Double>();

        str = (ArrayList<Double>)(event.get("x"));
        double[] x_Ptr = new double[str.size()];

        for (int i = 0; i < x_Ptr.length; i++) {
            x_Ptr[i] = str.get(i).doubleValue();
        }

        System.out.println(x_Ptr[0]);

        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/json");

        Output bodyout = new Output(x_Ptr);

        return ApiGatewayResponse.builder()
                .setStatusCode(200)
                .setObjectBody(bodyout)
                .setHeaders(headers)
                .build();
    }
}

标签: javaamazon-web-services

解决方案


为输入类型定义一个 POJO,问题是反序列化时类型信息不可用,它是从数据中推断出来的。

class MyPojo {
  List<Double> x;
}

public class Handler implements RequestHandler<MyPojo, ApiGatewayResponse> {
    private static final Logger LOG = Logger.getLogger(Handler.class);

    @Override
    public ApiGatewayResponse handleRequest(MyPojo event, Context context) {
        // event.x is now a list of doubles
    }
}

推荐阅读