1. 程式人生 > >Spring Boot中解析屬性首字母為大寫的Json串的解決方案

Spring Boot中解析屬性首字母為大寫的Json串的解決方案

  假設收到Post方法HTTP報文,其body部分內容如下:

{

"AuditState" : "pass",

"CurPage": "0",

"PageSize": 10,

"Status": "refuse"

}

為處理此請求,Controller定義如下:

@RequestMapping(value = "/PostToken", method = RequestMethod.POST)
public void getToken(@RequestBodyDealerCondition condition){
    DealerCondition dealerCondition = newDealerCondition();
    dealerCondition.setAuditState(condition.getAuditState());
    dealerCondition.setCurPage(condition.getCurPage());
    return

;
}

用於接收Post報文中的json串的模型定義如下:

public class DealerCondition {
    private String AuditState ;
    private int CurPage;
    private int PageSize;

    public String getAuditState() {
        return AuditState;
    }
    public void setAuditState(String auditState) {
        AuditState = auditState;
    }
    public int

getCurPage() {
        return CurPage;
    }
    public void setCurPage(intcurPage) {
        CurPage = curPage;
    }
    public int getPageSize() {
        return PageSize;
    }
    public void setPageSize(intpageSize) {
        PageSize = pageSize;
    }
}

雖然為了想成功解析引數,特意將DealerCondition中的屬性首字母定義為大寫,與

json引數保持一致,但仍然無濟於事,如下圖所示,解析出的屬性全部為null

 

查詢相關資料後,找到兩種解決方案:

方案一:將DealerCondition的屬性首字母全部改為大寫的同時,需要將訪問級別改為public型別 (此種方案雖然能夠解決問題,但有悖於面向物件的封裝特性)

方案二:使用JsonProperty註解,如下形式

public class DealerCondition {
    @JsonProperty(value = "AuditState")
    private String AuditState ;
    @JsonProperty(value = "CurPage")
    private int CurPage;
    @JsonProperty(value = "PageSize")
    private int PageSize;

    public String getAuditState() {
        return AuditState;
    }
    public void setAuditState(String auditState) {
        AuditState = auditState;
    }
    public int getCurPage() {
        return CurPage;
    }
    public void setCurPage(intcurPage) {
        CurPage = curPage;
    }
    public int getPageSize() {
        return PageSize;
    }
    public void setPageSize(intpageSize) {
        PageSize = pageSize;
    }
}