【小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();
转换成功~