Spring MVC框架
关于Spring MVC框架
Spring MVC是建立在Spring框架基础之上的。
Spring MVC主要解决了接收请求、响应结果的问题。
关于接收请求
需要自定义类,在类上添加@Controller
/ @RestController
注解,则此类就是控制器类。
通常,建议在类上也添加@RequestMapping
配置请求路径中的前缀部分。
在类中自定义处理请求的方法:
- 注解:添加
@RequestMapping
系列注解来配置请求路径和某些参数 - 访问权限:应该使用
public
- 返回值类型:在前后端分离的开发模式下,应该使用自定义的数据类型,例如
JsonResult
- 方法名称:自定义
- 参数列表:当请求参数数量只有1个时,或少量参数且没有相关性,直接写,当请求参数数量超过1个且具有相关性时,应该封装为自定义的数据类型,并使用自定义的数据类型作为参数
关于接收的请求参数
如果要求客户端提交的请求参数是JSON格式的,则处理请求的方法的参数列表中,封装的数据类型必须添加@RequestBody
注解,如果要求提交的请求参数是FormData格式的,则不可以添加@RequestBody
注解。
如果某个请求参数是URL的一部分,在使用@RequestMapping
系列注解配置请求路径时,需要使用{}
格式的占位符,例如/albums/{id}/delete
,并且,在处理请求的方法的相关参数上,添加@PathVariable
注解。
另外,还可以在请求参数上添加@RequestParam
,此注解可以指定请求参数名称、限制必须提交、配置默认值,但此注解并不是必须的。
关于RESTful
RESTful是一种服务器端软件的设计风格。
RESTful的典型表现是:在URL中会存在某些具有唯一性的参数值,例如id、用户名等。
RESTful还建议根据对数据操作的方式不同,使用不同的请求方式,例如删除数据时应该使用DELETE
这种请求方式,但,通常仍只使用GET
和POST
。
RESTful只是一种风格,并不是设计规范。
处理响应
在前后端分离的开发模式下,响应方式都是“响应正文”的,可以:
- 在方法上添加
@ResponseBody
- 在类上添加
@ResponseBody
- 在类上添加
@RestController
以上3种方式均可。
通常,为了保证服务器端响应结果的格式是统一的,会自定义数据类型,封装需要响应的数据,至少包括:
- 业务状态码
- 错误时的提示文本
- 成功时的数据
当处理请求的方法的返回值类型是以上封装的类型(即项目中的JsonResult
)时,且当项目中已经添加了jackson-databind
依赖时,此依赖项中的Converter会自动将方法返回的对象转换为JSON格式并响应到客户端去。
统一处理异常
自定义统一处理异常的类,在类上添加@ControllerAdvice
/ @RestControllerAdvice
注解。
在类中自定义处理异常的方法:
- 注解:
@ExceptionHandler
- 访问权限:应该使用
public
- 返回值类型:参考处理请求的方法
- 方法名称:自定义
- 参数列表:至少有1个被处理的异常类型参数,可按需添加特定类型的参数,例如
HttpServletRequest
、HttpServletResponse
等,但不可以像处理请求的方法那么自由
在同一个项目中,可以有多个统一处理异常的类,每个类中都可以有多个处理异常的方法,只要这些方法处理的异常不完全相同(各方法处理的异常允许存在继承关系)即可。
Spring MVC的核心处理流程
Spring MVC的核心组件:
DispathcerServlet
:用于统一接收请求,并分发HandlerMapping
:记录了请求路径与处理请求的控制器组件的对应关系Controller
:实际请求的组件ModelAndView
:封装了数据与视图名称的结果ViewResolver
:根据视图名称确定实际应用的视图组件
小结
关于Spring MVC框架,你应该:
- 理解Spring MVC框架的作用
- 掌握使用控制器接收请求,并响应结果
- 理解
JsonResult
这种封装响应数据的类型的作用、设计思路 - 掌握处理异常
- 理解RESTful
另外,暂未涉及的:
- Spring MVC拦截器