Controller方法请求类型和参数
get请求和post请求:
- GET请求:通常用于请求服务器发送某个资源。GET请求会把参数包含在URL中,这些参数在浏览器回退时是无害的,并且可以被Bookmark。GET请求产生的URL地址可以被缓存,但请求参数会被完整保留在浏览器历史记录里,同时有长度限制,并且只接受ASCII字符。由于GET请求的参数直接暴露在URL上,因此不能用来传递敏感信息。
- POST请求:通常用于向指定资源提交数据进行处理,例如提交表单或者上传文件。POST请求的参数通过request body传递,不会暴露在URL上,因此相对更安全。POST请求不会受到URL长度限制,并且支持多种编码方式。
简单的说: get请求的参数是在url后面的
post请求的数据是通过RequestBody传递的,更加安全
RequestParam:
针对QueryString参数传递, 就是一个用&分隔的字符串
http://localhost:8080/login?username=harden&password=123123
如果参数名和url传递的key一致则RequestParam("id")中的名字可以省略
@RequestParam('id', required=false)
require属性默认为true, 也就是说必须要传递id这个参数, 但是当required属性设置为false, 则表示不是必须的, 可以不传
当参数不用RequestParam注解的时候也是传不传无所谓,不传取值为null 例如:
public void login(String id, @RequestParam('name') String name)
则表示id参数不传也行, 但是name必须传
当接受对象是一个自定义的对象时, 比如User对象, 有name, password等属性, 在通过QueryString传递时, 会自动的将User中与之对应的属性赋值, 没有传的属性为null
public void login(User user)
但是一旦加上注解就会报错, 因为加上注解@RequestParam的话 该参数就是一定要有的
传递数组和集合:
这两种方式都行: 1. 多行的name, 2. 一行name, 在value中多个值, 用逗号隔开
优先的是多行形式, 也就是说, 当如下:
这种形式时, 就会将第一个name视为一个整体"明哥,明哥哥",即数组的一个元素
PathAvailable:
这种方法就是直接在url上面写数据, 格式不再是键值对的形式, 而是直接的路径形式
例如:
@RequestMapping('login/{name}/{password}')
public void login(@PathVariable('name') String name, @PathVariable('password') password)
http://localhost:8080/login/harden/123123
对应的就是login这个方法, 然后第一个参数的值为harden, 第二个为12123
注意, RequestMapping中的参数名一定要和@PathVariable中的名字对应上
数组和集合的传递方式:
多个值之间用逗号隔开
上传文件:
RequestBody:
只能有一个RequestBody
传递数组集合:
注意数组或集合的格式的书写即可
传json对象:
HttpServlertRequest:
和jsp中的好像