持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
俗话说:温故而知新,学习SSM框架也有一段时间了,在开发项目的时候虽然处于会用的程度,但是对于这个框架的理解仍然不够深刻,因此进行一个复习,加深自己对于SSM框架的理解,同时我也会尽量将这些基础点以我自身的理解写出来,希望能对大家有所帮助
SpringMVC中的请求与响应
接收请求,获得请求参数
SpringMVC可以接收客户端发送过来的如下类型的数据
- 基本类型数据
- POJO类型数据
- 数组类型数据
- 集合类型数据
获取请求中的基本类型数据
前提:Controller中的业务方法的参数名称要与请求参数的name一致,SpringMVC会自动为使用者映射匹配
如:地址栏中带有请求参数username和age
则对应的业务方法的参数列表中的参数名要与请求参数对应
获取请求中的POJO类型参数
只要Controller中的业务方法中接收的POJO参数的成员属性名与请求参数的name一致,参数会进行自动映射匹配
获得数组类型参数
Controller中的业务方法的数组名称与请求参数中的数组名称相同即可,参数值会进行自动的映射匹配
获得集合类型参数
当使用ajax提交请求时,可以指定contentType为json格式,那么在Controller的参数列表位置使用@RequestBody就可以直接接收集合数据
前端发送ajax请求
$.ajax({
type:"POST,
url:"${pageContext.request.contextPath}/user/quick15",
data:JSON.stringify(userList),
contentType:"application/json;charset=utf-8"
});
在Controller的业务方法中使用@RequestBody注解接收前端发送过来的集合类型的JSON字符串
RequestMapping(value="/quick15")
@ResponseBody
public void save15(@RequestBody List<User> userList){
...
}
以上获取请求的方式中,都有一个共同点:请求中的参数名称与Controller中业务方法的参数名称相同,那么如果遇到了请求中的参数名称需要与Controller中业务方法的参数名称不相同的情况呢
参数绑定注解@RequestParam
当请求中的参数名称与Controller业务方法中参数名称不一致时,就需要通过@RequestParam注解进行参数的绑定
具体情况如下:
使用@RequestParam进行参数的绑定
@RequestMapping("/quick14")
@ResponseBody
public void queickMethod14(@RequestParam("name") String username){
...
}
@RequestParam注解还有如下参数可以使用:
- value(默认):请求参数名称
- require:请求参数中是否必须包括此参数,默认为true,接收参数时若是没有此参数则报错
- defaultValue:当没有指定请求参数时,使用指定的默认值赋值
获得Servlet的相关API
SpringMVC之哦吃使用原始ServletAPI对象作为Controller方法的参数进行注入,常用的对象如下:
- HttpServletRequest
- HttpServletResponse
- HttpSession
@RequestMapping("/quick16")
@ResponseBody
public void quickMethod16(HttpServletRequest request,HttpServletResponse response,HttpSession session){
//直接在参数列表注入即可
...
}
获取请求头信息————@RequestHeader
使用@RequestHeader可以获得请求头信息,相当于web阶段学习的request.getHeader(name) @RequestHeader注解的属性如下:
- value:请求头名称
- required:是否必须携带此请求头
@RequestMapping("/quick17")
@ResponseBody
public void quickMethod17(@RequestHeader(value = "User-Agent",required = false) String headerValue){
...
}
获取Cookie信息————@CookieValue
使用@CookieValue可以获得指定Cookie的值 @CookieValue注解的属性如下:
- value:要获取的cookie的名称
- required:是否必须携带此cookie
@RequestMapping("/quick18")
@ResponseBody
public void quickMethod18(@CookieValue(value = "JSESSIONID",required = false) String jsessionid){
...
}