[英]Why isn't JSON being unmarshalled into my Java class?
我正在使用Spring Boot和RestTemplate從內部服務獲取數據。 我正在返回的JSON是因為響應沒有被解組到我的對象中,而且我無法弄清楚原因。 (我正在使用其他類似的REST API,並且這些API都在工作,因此我之前已經做過。)
發出請求的代碼是標准的東西:
public ChecklistResponse getCurrentStatus(String studentId) {
RestTemplate restTemplate = createRestTemplate();
HttpHeaders httpHeaders = this.createHeaders();
String url = this.createItemStatusUrl(studentId);
ResponseEntity<ChecklistResponse> responseEntity = restTemplate.exchange(url, HttpMethod.GET,
new HttpEntity<>(httpHeaders), ChecklistResponse.class);
ChecklistResponse checklistResponse = responseEntity.getBody();
return checklistResponse;
}
整個對象樹很大,所以我不能在這里真正顯示它。 不過,ChecklistResponse很簡單:
public class ChecklistResponse {
private HttpStatus httpStatus;
private String responseType;
private Response response;
public ChecklistResponse() {
}
... getters/setters, equals, hashCode, toString ...
}
JSON響應的開始看起來像這樣:
{
"httpStatus": {
"code": "200",
"description": "OK"
},
"responseType": "namespaceURI=\"http://bmeta.xxx.com/student/studentChecklistV0.xsd\" element=\"studentChecklist\"",
"response": {
"studentChecklist": {
"identifier": {
我設置了攔截器來驗證是否收到響應。 我也在禁用攔截器的情況下運行了它,因此我知道它沒有消耗響應(盡管我在其他地方成功使用了攔截器,並且對象已正確地編組。)
我的問題是,如何調試此問題? 我嘗試過啟用Jackson調試,但是沒有任何效果。 我已經在整個ChecklistResponse類中設置了斷點,但是沒有遇到任何斷點。
您很可能忘記了添加公共無參數構造函數,請添加如下所示的代碼:
public ChecklistResponse(){}
您應該將這些構造函數添加到對象樹中的所有類。
另一件事要看的是,問題是否是JSON對象中的值(例如,未轉義的引號等)的結果。嘗試對具有瑣碎值但無空/空值的模擬對象進行單元測試,看看是否測試能否通過,區分大小寫的問題有時也會導致失敗,在getter / setter中設置斷點,在過程中應調用這些斷點,確保它們以及類本身都是公共的,最后我可以考慮到循環引用,請確保您的對象中沒有這種引用,因為這會引起問題。
確保模型對象ChecklistResponse
正確表示您正在測試的API返回的JSON對象的映射。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.