【问题标题】:Null response values from REST API using restTemplate使用 restTemplate 来自 REST API 的空响应值
【发布时间】:2023-04-07 18:33:01
【问题描述】:

我创建了一个返回 JSON 响应的 Mock 服务,如下所示:

{ "RegionsID": "123", "RegionsName": "TestRegion", “地区名单”:[ { “区号”:“321” }, { “区域名称”:“测试区域” } ] }

然后我创建了 GetRegionsDistrictsRestClient 类以使用 restTemplate 使用 REST API:

public class GetRegionsDistrictsRestClient {

private Logger logger = Logger.getLogger(getClass().getName());

@Autowired
public RegionRequestHeader getRegionDistrict() {

    String theUrl = "https://a03e1a89-0363-4b17-8e3c-eb0220020e9b.mock.pstmn.io/GetRegionsDistricts";

    RestTemplate restTemplate = new RestTemplate();

    RegionRequestHeader result = restTemplate.getForObject(theUrl, RegionRequestHeader.class);

    return result;
}

}

RegionRequestHeader 和 DistrictRequestHeader 是这样的:

public class RegionRequestHeader {

private Integer regionsID;

private String regionsName;

private List<DistrictRequestHeader> districtList;

public Integer getRegionsID() {
    return regionsID;
}

public void setRegionsID(Integer regionsID) {
    this.regionsID = regionsID;
}

public String getRegionsName() {
    return regionsName;
}

public void setRegionsName(String regionsName) {
    this.regionsName = regionsName;
}

public List<DistrictRequestHeader> getDistrictList() {
    return districtList;
}

public void setDistrictList(List<DistrictRequestHeader> districtList) {
    this.districtList = districtList;
}

}

public class DistrictRequestHeader {

private Integer districtsID;

private String districtsName;

public Integer getDistrictsID() {
    return districtsID;
}

public void setDistrictsID(Integer districtsID) {
    this.districtsID = districtsID;
}

public String getDistrictsName() {
    return districtsName;
}

public void setDistrictsName(String districtsName) {
    this.districtsName = districtsName;
}

}

响应没问题,但屏幕截图中提到的值为 null:

【问题讨论】:

    标签: spring resttemplate spring-rest


    【解决方案1】:

    因为您在类中有不同的属性名称。 Spring 自动反序列化不会正确映射字段与响应 JSON 结构。

    如果这是响应正文

    { "RegionsID": "123", "RegionsName": "TestRegion", "DistrictList": [ { "DistrictsID": "321" }, { "DistrictsName": "TestDistrict" } ] }
    

    然后,您需要在类中显式定义 JSON 属性名称

    public class RegionRequestHeader {
    
    @JsonProperty("RegionsID")
    private Integer regionsID;
    
    @JsonProperty("RegionsName")
    private String regionsName;
    
    @JsonProperty("DistrictList")
    private List<DistrictRequestHeader> districtList;
    
    // Getters & Setters
    }
    

    同样,

    public class DistrictRequestHeader {
     @JsonProperty("DistrictsID")
     private Integer districtsID;
    
     @JsonProperty("DistrictsName")
     private String districtsName;
     //Getters & Setters
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-27
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      相关资源
      最近更新 更多