簡體   English   中英

為什么不將JSON解組到我的Java類中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM