0
我正在爲我的Grails應用程序的API,我試圖做一些事情有點非REST(雖然非常有用)。我試圖讓顯示和更新操作,以接受ID 或名。我在我的URLMappings文件以下映射:Grails的API更新(PUT)沒有ID
"/api/host" (controller:"API", action:"hostList", method:'GET', parseRequest:true)
"/api/host/$id" (controller:"API", action:"hostShow", method:'GET', parseRequest:true)
"/api/host/$id" (controller:"API", action:"hostUpdate", method:'PUT', parseRequest:true)
"/api/host" (controller:"API", action:"hostCreate", method:'POST', parseRequest:true)
我想是有hostShow和hostUpdate控制器行動接受任何ID 或名的$ id。這是工作的罰款與顯示的動作,但是當我的HTTP PUT嘗試,我得到以下錯誤:
HTTP/1.1 422 Unprocessable Entity
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=UTF-8
{"errors":[{"object":"Host","field":"id","rejected-value":"TEST","message":"Property id must be a valid number"}]}
我似乎無法避開這個錯誤。我使用的嘗試和執行該curl命令是:
curl -i -X PUT -H "Content-Type:application/json" -d "{name:NEWTEST}", http://localhost:8080/myapp/api/host/TEST
任何意見或幫助這將是非常感謝!下面是我的hostShow和hostUpdate動作的代碼:它原來是與該是給我的錯誤,而不是一個與Grails的問題或API機制本身的代碼問題
def hostShow() {
def hostInstance
try {
hostInstance = Host.get(params.id)
}
catch(Exception E) {
hostInstance = Host.findByHostname(params.id)
}
if(hostInstance == null)
respond null, [status: HttpStatus.NOT_FOUND]
respond hostInstance
}
@Transactional
def hostUpdate() {
// Convert incoming JSON to params structure
request.JSON.each { k,v ->
params[k] = v
}
// Get by either ID or hostname
def hostInstance
try {
hostInstance = Host.get(params.id)
}
catch(Exception E) {
hostInstance = Host.findByHostname(params.id)
}
hostInstance.properties = params // Set new properties
hostInstance.save(flush:true)
respond hostInstance, [status: HttpStatus.OK]
}
*試圖做一些事情有點非REST * - 爲什麼? – dmahapatro
因爲ID是內部的應用程序,而不是使用那些誰將會借力API。我們需要讓API對對象名稱進行操作。 – Nisrak