我在这里有自己的表格,就Grails应用而言,没有什么不寻常的。
<g:form url="[resource:myClass, action:'update']" method="PUT" >
<fieldset class="form">
<g:render template="form"/>
</fieldset>
<fieldset class="buttons">
<g:actionSubmit action="update" value="update" />
</fieldset>
</g:form>
如果我进行定期提交,一切正常。但是,如果我尝试使用restfulcontroller,则会收到成功的保存消息,但它永远不会保存任何内容。
import grails.rest.RestfulController
import grails.transaction.Transactional
class MyClassRestController extends RestfulController<MyClass> {
static allowedMethods = [update: "PUT"]
@SuppressWarnings("GroovyUnusedDeclaration")
static responseFormats = ['json', 'xml']
@Transactional
def update(MyClass myClassInstance) {
myClassInstance.save flush:true, failOnError: true
respond new Expando(success: true, message: 'updated', myClass: myClassInstance)
}
}
这似乎很简单,这是我提交的方式:
<script type="text/javascript">
$(function () {
var frm = $('form');
frm.on('submit', function (e) {
e.preventDefault();
$.ajax({
type: "PUT",
url: putUrl,
data: JSON.stringify(frm.serializeArray()),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
console.info(data);
},
failure: function (errMsg) {
console.info(errMsg)
}
});
});
});
</script>
在控制台上,PUT一切似乎都正确,我收到了成功消息和MyClassInstance,但它是未编辑的MyClass-好像它正在通过GORM查找并忽略了我的PUT发送的内容。我忘记了什么?我是否需要为PUT设置任何内容以“保持”状态和myClassInstance?
[这是我的请求:>>
忽略创建的日期部分,它将被覆盖。这是响应:
{ "metaPropertyValues": [ { "class":"groovy.lang.MetaExpandoProperty", "modifiers":1, "name":"success", "type":"java.lang.Object" }, { "class":"groovy.lang.MetaExpandoProperty", "modifiers":1, "name":"message", "type":"java.lang.Object" }, { "class":"groovy.lang.MetaExpandoProperty", "modifiers":1, "name":"auctionUser", "type":"java.lang.Object" } ], "properties":{ "success":true, "message":"AuctionUser updated", "auctionUser":{ "class":"Auction.AuctionUser", "id":2, "addressCity":"Minneapolis", "addressState":"MN", "addressStreet":"1234 ABC Street", "addressZip":"55408", "created":"2015-03-31T05:00:00Z", "firstName":"Trat", "lastName":"Tauer", "username":"[email protected]" } } }
您可以忽略其中的大部分内容,但是请注意,addressStreet和firstName作为先前值而不是作为通过PUT传递的JSON返回。这是怎么了?
我在这里有自己的表格,就Grails应用而言,没有什么不寻常的。
Grails所做的是使用POST参数来隧道化HTTP方法
<g:form method="post" class="form-horizontal" role="form" >
<g:hiddenField name="_method" value="PUT" />