使用Spring RestTemplate解析REST响应遇问题,急求解决方案
解决RestTemplate解析JSON响应失败的问题
我来帮你排查下问题,核心原因是你的实体类字段和返回的JSON字段不匹配,导致Jackson无法正确映射数据,具体问题和修复方案如下:
问题分析
对照你给出的JSON响应和实体类定义,有两处关键不匹配:
- JSON里的
Status字段是大写开头,但你的GPSEnabledVehicles类里定义的是private String status;(小写s),Jackson默认遵循驼峰命名匹配规则,这里大小写不一致会导致字段无法赋值。 - JSON里的车辆数据数组是
data,但你的类里对应的字段是vehicleDetails,字段名完全不对应,所以数组数据无法映射到集合中。
修复方案
最规范的做法是使用@JsonProperty注解显式指定JSON字段名,既保留Java代码的驼峰命名规范,又能正确绑定JSON数据。
修改后的实体类代码
1. GPSEnabledVehicles类
@JsonIgnoreProperties(ignoreUnknown = true) public class GPSEnabledVehicles { @JsonProperty("Status") private String status; @JsonProperty("data") private List<VehicleDetails> vehicleDetails; // Getter和Setter方法 public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public List<VehicleDetails> getVehicleDetails() { return vehicleDetails; } public void setVehicleDetails(List<VehicleDetails> vehicleDetails) { this.vehicleDetails = vehicleDetails; } }
2. VehicleDetails类(需确保字段匹配)
还要注意VehicleDetails类的字段要和JSON数组里的元素对应,示例代码如下:
@JsonIgnoreProperties(ignoreUnknown = true) public class VehicleDetails { @JsonProperty("VehicleNo") private String vehicleNo; @JsonProperty("lat") private String lat; @JsonProperty("lng") private String lng; @JsonProperty("timestamp") private String timestamp; @JsonProperty("speed") private String speed; // 对应的Getter和Setter方法 }
测试验证
修改完实体类后,再执行原有的RestTemplate代码:
RestTemplate restTemplate = new RestTemplate(); Response response = restTemplate.getForObject("你的请求URL", Response.class);
此时Jackson就能正确将JSON响应映射到你的实体类对象中了。
内容的提问来源于stack exchange,提问作者Santhosh Keshannagari
相关产品推荐
相关产品推荐

