实现 PUT
您需要支持的最后一个 HTTP 方法就是 PUT。了解了 POST 之后,会知道代码基本是一样的。惟一不同的就是它无法直接从 XML 构造类,您需要向 GORM 寻求现有的类。然后,airport.properties = params.airport 行会用新的 XML 数据来替代现有的字段数据,如清单 21 所示:
清单 21. 响应 HTTP PUT
def index = {
switch(request.method){
case "POST": //...
case "GET": //...
case "PUT":
def airport = Airport.findByIata(params.airport.iata)
airport.properties = params.airport
if(airport.save()){
response.status = 200 // OK
render airport as XML
}
else{
response.status = 500 //Internal Server Error
render "Could not create new Airport due to errors:\n ${airport.errors}"
}
break
case "DELETE": //...
}
}
switch(request.method){
case "POST": //...
case "GET": //...
case "PUT":
def airport = Airport.findByIata(params.airport.iata)
airport.properties = params.airport
if(airport.save()){
response.status = 200 // OK
render airport as XML
}
else{
response.status = 500 //Internal Server Error
render "Could not create new Airport due to errors:\n ${airport.errors}"
}
break
case "DELETE": //...
}
}
创建一个名为 editAirport.xml 的文件,如清单 22 所示:
清单 22. editAirport.xml
<airport>
<iata>oma</iata>
<name>xxxEppley Airfield</name>
<city>Omaha</city>
<state>NE</state>
<country>US</country>
<lat>41.3019419</lat>
<lng>-95.8939015</lng>
</airport>
<iata>oma</iata>
<name>xxxEppley Airfield</name>
<city>Omaha</city>
<state>NE</state>
<country>US</country>
<lat>41.3019419</lat>
<lng>-95.8939015</lng>
</airport>
最后,使用 cURL: curl --verbose --request PUT --header "Content-Type: text/xml" --data @editAirport.xml http://localhost:9090/trip/rest/airport 来测试它。