服務調用對象接收參數屬性值總接收不到不null

兩個服務接口之間的調用,對象接收參數,傳過去json字符串明明賦值是正確的,但是相應對象接收到的屬性值就總是空。後來發現,如果javabean裏的屬性是大寫字母開頭則會出現這種問題,請求的時候,json字符串是大寫開頭,MVC在接收的時候,根據對象的setter,getter屬性認爲字段都是小寫的,所以沒辦法綁定。
規範代碼,屬性也應該是小定字母開頭。但是如果屬性改不了,那有還可以用.alibaba.fastjson,用這個json把java對象轉換爲字符串的時候,屬性會自動轉成小寫開頭。在pom.xml中引入如下代碼即可使用

<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.5</version>
</dependency>

下面舉例說明:

javaBean


public class PriceConfirmRequestDTO  {
    private Integer HotelID;
    private String CheckInDate;
    private String CheckOutDate;
    private String Nationality;
    private Integer NumOfRooms;
    private List< RoomOccupancyType > OccupancyDetails;


    public Integer getHotelID() {
        return HotelID;
    }

    public void setHotelID(Integer hotelID) {
        HotelID = hotelID;
    }

    public String getCheckInDate() {
        return CheckInDate;
    }

    public void setCheckInDate(String checkInDate) {
        CheckInDate = checkInDate;
    }

    public String getCheckOutDate() {
        return CheckOutDate;
    }

    public void setCheckOutDate(String checkOutDate) {
        CheckOutDate = checkOutDate;
    }

    public String getNationality() {
        return Nationality;
    }

    public void setNationality(String nationality) {
        Nationality = nationality;
    }

    public Integer getNumOfRooms() {
        return NumOfRooms;
    }

    public void setNumOfRooms(Integer numOfRooms) {
        NumOfRooms = numOfRooms;
    }

    public List<RoomOccupancyType> getOccupancyDetails() {
        return OccupancyDetails;
    }

    public void setOccupancyDetails(List<RoomOccupancyType> occupancyDetails) {
        OccupancyDetails = occupancyDetails;
    }

}

這個javaBean的屬性首字母都是大寫的,下而用goson把對象轉成json串的結果如下 :

			PriceConfirmRequestDTO pp = new PriceConfirmRequestDTO();
			pp.setRatePlanID(ratePlanCode);
			pp.setHotelID(Integer.parseInt(hotelId));
			pp.setCheckInDate(MyTime.dateToStrLong(checkInDateStr));
			pp.setCheckOutDate(MyTime.dateToStrLong(checkOutDate));
			pp.setNationality("CN");
			pp.setNumOfRooms(roomNum);
			pp.setOccupancyDetails(OccupancyDetails);
			String ppstr = new Gson().toJson(pp);
			System.out.println("#####請求url:"+url);
			System.out.println("#####請求priceConfirm參數:"+ppstr);
			String reuslt = HttpClientUtil.sendConnectionPost(url, ppstr);

ppstr的結果爲:
注意轉換後的首字母爲大寫

{
	"RatePlanID": "9912354",
	"HotelID": 656,
	"CheckInDate": "2014-12-12 00:00:00",
	"CheckOutDate": "2015-01-08 00:00:00",
	"Nationality": "CN",
	"NumOfRooms": 1,
	"OccupancyDetails": [{
		"RoomNum": 1,
		"AdultCount": 1,
		"ChildCount": 0
	}, {
		"ChildAgeDetails": [4],
		"RoomNum": 2,
		"AdultCount": 0,
		"ChildCount": 1
	}]
}

用alibaba.fastjson轉換如下:

			PriceConfirmRequestDTO pp = new PriceConfirmRequestDTO();
			pp.setRatePlanID(ratePlanCode);
			pp.setHotelID(Integer.parseInt(hotelId));
			pp.setCheckInDate(MyTime.dateToStrLong(checkInDateStr));
			pp.setCheckOutDate(MyTime.dateToStrLong(checkOutDate));
			pp.setNationality("CN");
			pp.setNumOfRooms(roomNum);
			pp.setOccupancyDetails(OccupancyDetails);
			String ppstr = JSONObject.toJSONString(pp);
			System.out.println("#####請求url:"+url);
			System.out.println("#####請求priceConfirm參數:"+ppstr);
			String reuslt = HttpClientUtil.sendConnectionPost(url, ppstr);

ppstr的結果爲:
注意轉換後的首字母爲小寫

{
	"checkInDate": "2014-12-12 00:00:00",
	"checkOutDate": "2015-01-08 00:00:00",
	"currency": "SGD",
	"hotelID": 656,
	"nationality": "CN",
	"numOfRooms": 1,
	"occupancyDetails": [
		{
			"adultCount": 1,
			"childCount": 0,
			"roomNum": 1
		},
		{
			"adultCount": 0,
			"childAgeDetails": [
				4
			],
			"childCount": 1,
			"roomNum": 2
		}
	]
}

接收參數層

  
    @RequestMapping("/priceConfirm")
    public PriceConfirmResponse priceConfirmRequest(@RequestBody PriceConfirmRequestDTO pcr){
        return ddPriceConfirm.priceConfirmRequest(pcr);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章