自学内容网 自学内容网

【小bug】使用 RestTemplate 工具从 JSON 数据反序列化为 Java 对象时报类型转换异常

        起因:今天编写一个请求时需要通过RestTemplate调用外部接口,获取一些信息,但是在获取了外部接口响应内容后,使用强制转换发现报了类型转换异常。之前也遇到过,但是没记录下来,今天又查了一遍……干脆记录一下。

        控制类方法报错位置

        报错信息

1. 原因

        在使用 RestTemplate 从 JSON 数据反序列化时,默认会将 JSON 数据转换为 LinkedHashMap。而在我的代码 result.get("obj") 的实际数据类型就是LinkedHashMap。

2. 解决

        方案一:使用ObjectMapper

        ObjectMapper是Jackson提供的一个类,用于将json数据转换为java对象。

    ObjectMapper objectMapper = new ObjectMapper();
    //                                            需要转换的内容     目标类
    Resfood resfood = objectMapper.convertValue(result.get("obj"), Resfood.class);

        方案二:使用ResponseEntity

        ResponseEntity 是 Spring 对 HTTP 响应的封装,包括状态码、响应头和响应体。RestTemplate 会向指定的 url 发送一个 GET 请求,服务器返回的响应会被封装到 ResponseEntity 对象中,使用ParameterizedTypeReference<T> 可以确保响应体会被正确地反序列化为 T 类型。

//直接接收响应体部分的内容并将其转换为 T 对象。
ResponseEntity<T> response = restTemplate.getForEntity(url, T.class);
//获取 HTTP 响应体的内容,并将其转换为 Object 对象
Object obj = response.getBody();

        

        转换成功~


原文地址:https://blog.csdn.net/BlackPudding_/article/details/142443251

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!