参看连接:http://www.javashuo.com/article/p-tqwpxeug-p.htmlhtml
我这里总结一下,Action的参数的来源比较多ios
1.urljson
2.路由设定数组
3.post中的内容被自动映射(form格式,json格式均可以)服务器
若是参数的类型是可为空类型,那么当不传递这个参数时,也能正确执行函数。可是,若是是int 这种,不能为空的类型,就会出现调用错误。这时候,须要使用int ? 类型。restful
对于post 请求 ,action 的参数自动映射与 request 的content-type 密切相关, 可是不管哪一种post请求,request的InputStream属性必定保存着post过来的数据。 app
例子1:框架
post 一个 content-type 为 application/json 的json到服务器端,json内容以下:函数
{"name":"aaaa","Meetings":"1","ImageBase64":"BBBCCCCC"}
服务器结果以下:post
能够看到,json中的key都被映射到了同名变量或属性中。hcpDto的 Name 和 name 的值,都来自json中的name,忽略大小写区别。能够简单地理解成,只要名称和类型容许,就会进行相应的映射。
可是用在request 的 form属性和 params属性中,没有出现相应的值,参见下图
例子1.2,若是post一个复杂的json对象
{"HCPInsertDto":{"name":"aaaa","Meetings":"1"},"ImageBase64":"BBBCCCCC"}
结果以下图:
name的值没法取到,也就是说,默认是没法解析json中第二层的属性。那么为何有的框架能够作到多层json的解析呢?????????????????????
例子2:
post 一个 content-type 为 application/x-www-form-urlencoded的数据到服务器,数据内容以下:
name=aaa&imagebase64=bbbbbbbb
服务器截图以下:
同时能够注意到,以 application/x-www-form-urlencoded 形式提交的数据,能够在request对象中的 form属性和params属性中都有值:
例子3
post 一个 content-type 为 multipart/form-data 的
首先,这个post的data格式,和 content-type的内容有些特殊,最好使用一个form表单构建,再粘贴到 restful client 里实验,截图以下:
结果以下:
能够看到,参数能够正确映射
例子4 在一些ios之类的前台库里,能够传递一个数组,我用restful client模拟了一下这种状况
代码以下:
------WebKitFormBoundaryTmMzofe8Ic12TbyA Content-Disposition:form-data;name="attendees[]" aaaa ------WebKitFormBoundaryTmMzofe8Ic12TbyA Content-Disposition:form-data;name="attendees[]" bbbb ------WebKitFormBoundaryTmMzofe8Ic12TbyA--
屡次传递一样的name属性,后台就会把这些数据处理为一个数组。注意,这里的[] 符号能够省略,server一样能够解析。
解析结果以下: