[SpringMVC]restful风格

简介: [SpringMVC]restful风格

1、概述

常规请求方式:

https://www.vatapi.com/book/query.do?page=12&pageSize=20

restful风格请求方式:

https://www.vatapi.com/book/query/12/20

显而易见,restful风格的请求方式简洁、安全性高。(谁知道哪个值对应哪个参数,代表什么意思。。。)

要把常规请求方式转换成restful风格,需要三步:

  1. 在web.xml中把核心控制器 \color{green}{核心控制器}核心控制器url-pattern的值由/*.do改为/。一般在修改成restful风格前,url-pattern的值是/*.do,表示拦截所有动态请求
    注:“拦截”指处理器映射器寻找控制器的过程。
  2. 在 @RequestMapper 中,在路径后加{a},比如上述的query.do,@RequestMapper 内的值是“query”,现在改成“query/{a}”;
  3. 在 @RequestMapper 注解的方法形参前加@PathVariable,用以映射参数值。

举个例子:

那请求就是:

${pageContext.request.contextPath}/book/queryBySyllabusId/12

2、使用细节

2.1 关于第一步

拦截的路径在修改前是/*.do,表示只拦截以.do结尾的请求。一般在请求后加.do,表示访问动态资源。比如login.do、query.do

将路径修改为/后,表示拦截所有请求,也包括类似login.do这样的动态资源请求。那问题来了,现在拦截路径是/,而请求是login.do,为什么处理器映射器还能找到@RequestMapper("login")这个控制器?

从SpringMVC的源码以及一些资料中得知,springmvc在底层排除掉了login.do中的.do

2.2 关于请求数据封装机制

restful风格完全抛弃了SpringMVC的请求数据封装机制(映射封装),如上述:https://www.vatapicom/book/query/12/20中的12、20,并没有参数与其绑定,映射关系完全取决于控制器形参前@PathVariable注解内的值.

2.3 补充第一点

SpringMVC底层会排除掉请求后的后缀。因此,对于访问非restful控制器,在请求时加不加后缀.do都可行。

因此,restful风格的配置不会影响其他非restful控制器,对于其他非restful控制器的访问不用修改。但是,需要注意的是,访问restful控制器时不能加后缀,如:

https://www.vatapi.com/book/query/12/20    √
https://www.vatapi.com/book/query/12/20.do    ×

2.4 关于静态资源的访问

关于静态资源配置,推荐一篇博文《SpringMVC访问静态资源 mvc:resources》(转发)。

由于restful风格的配置会拦截所有资源,也包括静态资源(如:image、css、js)。

https://www.vatapi.com/gd-book/28282718.jpg    // 找不到图片
https://www.vatapi.com/css/menu.css    // 找不到css,页面没有样式
https://www.vatapi.com/js/index.js    // 找不到js,页面没有功能

这样的请求是访问一张图片,但处理器映射器会把他当作一个对控制器的访问去寻找控制器,而不会去寻找图片,自然无法找到图片。因此,需要对静态资源做配置。

<mvc:resources location="/static/" mapping="/static/**" />    // 举例

2.5 关于拦截器

在配置拦截器时,若拦截的是restful控制器,{}内不需要一致。

示例:

<mvc:mapping path="/commonQuestion/queryByQuestionId/{questionId}"/>

{questionId}内的questionId可任意名称。

3、最后

本文的文面有点乱,这是因为restful风格的使用细节比较多,那五点是我在使用restful风格时所遇到问题的总结。

本文完结。

相关文章
|
7月前
|
XML JSON 前端开发
SpringMVC进阶-异常拦截器文件上传和Restful风格(1)
SpringMVC进阶-异常拦截器文件上传和Restful风格(1)
30 0
|
3天前
|
XML JSON 数据库
SpringMVC RESTful
SpringMVC RESTful
13 0
|
2月前
|
XML JSON Java
基于springMVC的RESTful服务实现
  RESTful(RESTful Web Services)一种架构风格,表述性状态转移,它不是一个软件,也不是一个标准,而是一种思想,不依赖于任何通信协议,但是开发时要成功映射到某协议时也需要遵循其标准,但不包含对通信协议的更改
23 1
|
3月前
|
XML JSON 前端开发
SpringMVC之视图和RESTful
【1月更文挑战第19天】 一、SpringMVC的视图 1、ThymeleafView 2、转发视图 3、重定向视图 4、视图控制器view-controller 二、RESTful 1、RESTful简介 a>资源 b>资源的表述 c>状态转移 2、RESTful的实现 3、HiddenHttpMethodFilter
60 0
|
3月前
|
XML JSON 数据库
SpringMVC之RESTful(含实际代码操作)
SpringMVC之RESTful(含实际代码操作)
|
4月前
|
XML JSON Java
SpringMVC原理分析 | Controller配置、RestFul风格
SpringMVC原理分析 | Controller配置、RestFul风格
31 0
|
4月前
|
XML JSON Java
SpringMVC与REST相结合实现RESTful风格
SpringMVC与REST相结合实现RESTful风格
73 0
|
7月前
|
SQL 前端开发 Java
【SpringMVC】RESTful风格CRUD实现
【SpringMVC】RESTful风格CRUD实现
38 0
|
7月前
|
设计模式 算法 前端开发
SpringMVC进阶-异常拦截器文件上传和Restful风格(2)
SpringMVC进阶-异常拦截器文件上传和Restful风格(2)
66 0
|
8月前
|
缓存 测试技术
SpringMVC的Restful风格
SpringMVC的Restful风格
37 0