Day01:
SpringMVC:
概述:
一个轻量级,基于MVC的web层应用框架,偏前端管理而不是基于业务逻辑层,
- Spring为表现层提供的基于MVC设计理念的web框架
- Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。
- 支持 REST 风格的 URL 请求。
- 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。
架构图解
SpringMVC的请求映射规则:
- @RequestMapping: 先访问类上映射路径,再根据方法路径进一步细化请求
处理多个URL:
@RequestMapping(value = {"/succeed","succ*","/test/succeed"})
处理http各种请求方式:
@RequestMapping中的method属性用于限制http的请求方式
处理动态url:
@RequestMapping(value = "{matchUrl}/{matchUrl2}")
- 子注解:
注解 | 等价于 | 适用场景 |
---|---|---|
@GetMapping | @RequestMapping(method = RequestMethod.GET) | GET:得到资源 |
@PutMapping | @RequestMapping(method = RequestMethod.PUT) | PUT:修改整体内容 |
@PostMapping | @RequestMapping(method = RequestMethod.POST) | POST:新增内容 |
@DeleteMapping | @RequestMapping(method = RequestMethod.DELETE) | DELETE:删除内容 |
@PatchMapping | @RequestMapping(method = RequestMethod.PATCH) | PATCH:修改部分内容 |
SpringMVC参数绑定
处理器映射器RequestMappingHandlerMapping找到对应urls与Controller的关系后,后续交给 处理器适配器RequestMappingHandlerAdapter来处理,在处理之前由 RequestMappingHandlerAdapter完成参数的绑定
参数绑定类型
- 默认支持类型
1.HttpServletRequest:
作用:通过request,获取请求的参数数据
2.HttpServletResponse:
作用:通过response,执行响应
3.HttpSession:
作用:通过session,获取和保存会话域数据
4.Model/ModelMap:
4.1.Model是一个接口,是模型,用于封装响应的模型数据
4.2.ModelMap是实现类,使用Model和使用ModelMap,效果是一样的
4.3.使用Model封装响应的模型数据,就可以不使用ModelAndView,页面视图可以使用字符串响应
- 基本数据类型
基础数据类型:byte、short、int、long、float、double、char、boolean
包装类型:Byte、Short、Integer、Long、Float、Double、Char、Boolenan
字符串:String
基础数据类型传递规则:属性名相同
不建议使用简单类型的基础类型(int)。原因是基础类型不能为null值,如果不传递会报异常
- pojo实体类
参数传递规则:被调用方法的参数类型及名称与pojo对象中属性类型及名称相同
- 日期类型处理
@InitBinder
public void initBinder(WebDataBinder binder){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//new CustomDateEditor(simpleDateFormat, true)的true表示是否可以传递空值
binder.registerCustomEditor(Date.class, new CustomDateEditor(simpleDateFormat, true));
}
- 复合pojo类型(一个对象的属性值是另一个类型的对象)
传递规则:类中的对象属性名.此对象属性,例如:customerInfo.shool
传递中文 处理乱码
<!--字符集处理-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 数组类型
传递规则:表单提交的name是一样的,后台会以array的方式接受
- list集合类型
list参数:list对象不能直接传递,需要构建构建一个对象,对象里面有一个List<T>的属性
list参数传递规则:
1、后台定义一个对象,对象里面有一个private List<T> list的属性,T为所要传递的list的类型
2、前台页面name="list[下标].T对象的属性名词"
参数常用注解
- @RequestMapping : 绑定 请求路径 与类或者类的方法 的映射关系
- @RequestParam : 绑定单个请求数据, 即可以是url参数也可以是表单提交参数
- @RequestBody: 接收json类型数据
- @PathVariable: 绑定url 参数值
时间转换:
在接收json数据时,我们之前定义的@InitBinder处理是无效的,这个时候我们就需要使用新的方式在Customer类的createrTime字段上添加
//创建时间,入参DateTimeFormat,出参:JsonFormat
@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
@JsonFormat(pattern ="yyyy-MM-dd hh:mm:ss",timezone = "GMT+8")