我忙於開發通過json web服務發送地圖(以及其他不相關的值)的函數,但問題是它在接收端看到它作爲JSONObject
(使用getClass()方法),因此它會爲對象添加額外的屬性,從而導致服務返回錯誤。因此,在發送端地圖的println的是這樣的:Groovy/Grails - Json web服務,帶有額外屬性的地圖
[21:{adultValue=1, kidValue=0}, 11:{adultValue=0, kidValue=4}]
但像這樣在接收端它的println的:
[11:[metaPropertyValues:[[name:adultValue, modifiers:1, type:java.lang.Object], [name:kidValue, modifiers:1, type:java.lang.Object]], properties:[kidValue:4, adultValue:0]], 21:[metaPropertyValues:[[name:adultValue, modifiers:1, type:java.lang.Object], [name:kidValue, modifiers:1, type:java.lang.Object]], properties:[kidValue:0, adultValue:1]]]
所以在接收端有代碼,執行以下操作(簡化這個問題):
map.each { key, value ->
def adultValue = value.adultValue.toInteger()
}
但它顯然拋出根據接收方沒有map.adultValue
一個空指針異常堂妹,只起了map.properties.adultValue
所以我的問題是,我可以做什麼在發送方,使接收方收到它的方式發送?我不允許更改接收方的代碼,但我可以查看輸出。
對於額外的澄清,這是我在發送端使用的代碼,以使Web服務調用:
def addAddons(map, anotherVar1, anotherVar2) {
println(map) // outputs the map as shown above
try {
def result
def http = new HTTPBuilder("the real url, not shown here")
http.request(Method.POST, groovyx.net.http.ContentType.JSON) { req ->
body = [anotherVar1: anotherVar1, anotherVar2: anotherVar2, map: map]
response.success = { resp, json ->
result = json
}
}
println("result: ${result}")
return result
} catch (all) {
all.printStackTrace()
return null
}
}
請讓我知道如果有什麼我需要添加
你的回答比我的好多了,你得票xD – PrintlnParams