[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风格时所遇到问题的总结。

本文完结。

相关文章
|
6天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
3月前
|
JSON 前端开发 Java
spring mvc Rest风格
spring mvc Rest风格
31 0
|
30天前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
1月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
1月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
|
1月前
|
JSON 前端开发 Java
Spring MVC返回JSON数据
综上所述,Spring MVC提供了灵活、强大的方式来支持返回JSON数据,从直接使用 `@ResponseBody`及 `@RestController`注解,到通过配置消息转换器和异常处理器,开发人员可以根据具体需求选择合适的实现方式。
87 4
|
1月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
70 3
|
1月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
67 2
|
2月前
|
前端开发 Java 应用服务中间件
我以为我对Spring MVC很了解,直到我遇到了...
所有人都知道Spring MVC是是开发的,却鲜有人知道Spring MVC的理论基础来自于1978 年提出MVC模式的一个老头子,他就是Trygve Mikkjel Heyerdahl Reenskaug,挪威计算机科学家,名誉教授。Trygve Reenskaug的MVC架构思想早期用于图形用户界面(GUI) 的软件设计,他对MVC是这样解释的。MVC 被认为是解决用户控制大型复杂数据集问题的通用解决方案。最困难的部分是为不同的架构组件想出好的名字。模型-视图-编辑器是第一个。
108 1
我以为我对Spring MVC很了解,直到我遇到了...
|
2月前
|
前端开发 Java API
Spring Boot 中的 MVC 支持
### Spring Boot 注解摘要 - **@RestController** - **@RequestMapping** - **@PathVariable** - **@RequestParam** - **@RequestBody**
26 2