一般就这么做,在Spring4.3版本以后,提供了@GetMapping注解更方便了开发,
@RequestMapping和@GetMapping区别
- @RequestMapping可以指定GET、POST请求方式
- @GetMapping等价于@RequestMapping的GET请求方式
//@RequestMapping(value = "hello", method= RequestMethod.GET )
@GetMapping("hello")
public String hello() {
return "hello spring boot";
}
@GetMapping 在限定使用get请求时候,更为简洁方便
@GetMapping用于将HTTP get请求映射到特定处理程序的方法注解
具体来说,@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
@PostMapping用于将HTTP post请求映射到特定处理程序的方法注解
具体来说,@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。
注意:通过浏览器的地址栏输入地址,所访问的URL都是get请求
一. 浏览器会发送get请求的情况
- 直接在浏览器地址栏输入某个地址
- 点击链接
- 表单默认的提交方式
二.浏览器会发送post请求的情况
- 设置表单method = “post”
三. get请求的特点
-
请求参数会添加到URL的后面,只能添加少量参数(因为请求行只有一行,大约只能存放2K左右的数据)
-
请求参数会显示在浏览器地址栏,路由器会记录请求地址
四. post请求的特点
1、 请求参数添加到实体内容里面,可以添加大量的参数(也解释了为什么浏览器地址栏不能发送post请求,在地址栏里我们只能填写URL,并不能进入到Http包的实体当中)
2、 相对安全,但是,post请求不会对请求参数进行加密处理(可以使用https协议来保证数据安全)。
先说get的,常规使用姿势是方法的请求参数中有一个HttpServletRequest
,我们通过ServletRequest#getParameter(参数名)
来获取具体的请求参数,
@GetMapping("/req")
public String requestParam(HttpServletRequest httpRequest) {
Map<String, String[]> ans = httpRequest.getParameterMap();
return JSON.toJSONString(ans);
}
2. 方法参数
这种解析方式比较厉害了,将GET参数与方法的参数根据参数名进行映射,从感官上来看,就像是直接调用这个一样
缺少一个参数时,为null,多了一个参数,无法被解析,类型不一致,500
@GetMapping("/arg")
public String argParam(String name, Integer age) {
return "name: " + name + " age: " + age;
}
大概post也差不多,推荐用第一种,第二种会改变函数头。现在规定参数都是一样的,这样比较好。@RequestMapping 不写method 为get,post方式都支持。
怎么做呢?首先,虽然axios都是post,但是都用request,然后参数是这样的:
HttpSession session, HttpServletRequest request, HttpServletResponse response
然后就这些,参数用map搞出来,怎么搞呢?
- String getParameter(String name):通过指定名称获取参数值;
- String[] getParameterValues(String name):通过指定名称获取参数值数组,有可能一个名字对应多个值,例如表单中的多个复选框使用相同的name时;
- Enumeration getParameterNames():获取所有参数的名字;
- Map getParameterMap():获取所有参数对应的Map,其中key为参数名,value为参数值。
说实在的意义不大,算了就这样吧。说实在的为什么呢?我还是觉得之前挺好的。
@ResponseBody的作用
在Controller里面,我们经常可以看到@ResponseBody这个注解,它的意思很简单,就是说明这个方法返回的东西会通过IO流的方式写入到浏览器。
@ResponseBody的作用其实是将java对象转为json格式的数据。将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】。在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。
因此,一般就是这样:
// 最终返回的对象
JSONObject res = new JSONObject();
res.put("code", 0);
if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
res.put("msg", "error:请输入手机号或密码");
return res;
}
boolean b = userService.check(username, password);
if (!b){
res.put("msg", "error:该账号不存在或密码错误");
return res;
}
就是如此了。
GET请求是不可以用@RequestBody来接收参数的
在axios中,
get(url[, config])
和post(url[, data[, config]])
,注意参数
get是在config中设置params{params:{...} }
post是设置data字段