Spring Boot REST 请求(GetMapping,PostMapping)、格式化日期参数、压缩响应内容
目录
REST 请求风格概述
Form 表单发起 put 请求
格式化日期请求参数
HTTP 响应内容压缩
REST 请求风格概述
1、HTTP 协议是一个广泛应用的 Internet 协议,提供了8个不同的请求方法(常见的是前 4 个):
请求方式 | 描述 |
GET | 向特定资源发出请求(请求指定页面信息,并返回实体主体) |
POST | 向指定资源提交数据进行处理请求(提交表单、上传文件) |
PUT | 向指定资源位置上上传其最新内容 |
DELETE | 请求服务器删除指定的资源 |
HEAD | |
OPTIONS | |
TRACE | |
CONNECT |
2、REST 全称 Representational State Transfer ——(资源)表现层状态转化,是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便, 所以正得到越来越多网站的采用。
3、REST 风格就是通过 Http 请求方式的不同来标识不同的方法,即对于同一个请求路径,可以根据请求方式的不同来区分它们。
操作 | 普通CRUD(根据uri区分) | REST风格CRUD(根据请求方式区分) |
查询 | localhost:8080/tiger/findUsers | localhost:8080/tiger/user-----get方式请求 |
添加 | localhost:8080/tiger/saveUser | localhost:8080/tiger/user-----post方式请求 |
修改 | localhost:8080/tiger/updateUser | localhost:8080/tiger/user-----pup方式请求 |
删除 | localhost:8080/tiger/deleteUser | localhost:8080/tiger/user-----delete方式请求 |
4、@RequestMapping 需要结合 RequestMethod 指定请求的 Http 方式,有:GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE,所以封装之后就得到了各种请求方式对应的注解。(不能完全一概而论谁优谁劣,有时候习惯就好)。
5、如 @GetMapping 内部就是 @RequestMapping(method = RequestMethod.GET),这些注解的属性和 @RequestMapping是一样的。
操作 | 举例 |
查询所有用户 |
@GetMapping("user") public String findUsers(Model model) { |
根据 id 查询用户 |
@GetMapping("user/{id}") public String findUserById(@PathVariable(name = "id") Integer id, Model model) { |
添加用户 |
@PostMapping("user") public String saveUser(User user) { |
修改用户 |
@PutMapping("user") public String updateUser(User user) { |
根据 id 删除用户 |
@DeleteMapping("user/{id}") public String deleteUser(@PathVariable(name = "id") Integer id) { |
Form 表单发起 put 请求
1、form 表单的 method 属性值只有 get 与 post 两种,所以 form 表单使用 put、delete 等其它请求方式时,需要特殊处理。
1)表单 method 属性值仍然指定为 post。 2)表单中创建一个隐藏的 input 项,name 属性值强制为 "_method",value 属性值指定此 form 请求的具体方式,如 put、delete 等 |
2、如果使用类似 JQuery 的 $.ajax 的方式,则可以使用它的 type 属性直接指定请求方式,如 type: put。
3、环境:Java jdk 1.8 +Spring boot 2.1.3 + Thymeleaf。
4、后台接口如下,主要用于模拟向页面传递数据与接收数据:
/*** 修改提交时调用此接口, put 请求: http://localhost:8080/example/httpPut** @param user* @return*/@PutMapping("example/httpPut")@ResponseBodypublic String httpPut(User user) {//将数据返回给页面,不操作数据.String valueAsString = "{}";try {ObjectMapper objectMapper = new ObjectMapper();valueAsString = objectMapper.writeValueAsString(user);} catch (JsonProcessingException e) {e.printStackTrace();}return valueAsString;}
5、前端修改页面如下,使用 Thymeleaf 处理数据,使用 form 表单发送 put 请求(其它 delete 请求方式也是同理):
<div style="width: 500px;height:400px;border: #1b6d85 1px solid;margin: auto;padding: 20px"><form action="" method="post" th:action="@{/example/httpPut}"><!--form的method只有get与post两种,使用put方式时:--><!--创建一个input隐藏项,name强制为 "_method",value值就指定此form请求的方式--><!--th:if 表达式:条件满足时生成标签,否则不生成标签--><input type="hidden" name="_method" value="put" th:if="${user!=null}"><!--主键id做成隐藏项,修改时根据id进行修改--><input type="hidden" name="id" th:if="${user!=null}" th:value="${user.id}"><!--三元运算符,当user不等于null时,取User的属性值,否则为空-->姓名:<input type="text" name="name" th:value="${user!=null}?${user.name}"><br><br>薪水:<input type="text" name="salary" th:value="${user!=null}?${user.salary}"><br><br>学历:<select name="education"><!--th:each 表达式用于遍历集合,如果当前学历项等于用户的学历,则让它默认选中--><option th:each="education:${educationArr}"th:text="${education}"th:value="${education}"th:selected="${user.education!=null}?${user.education==education}"></option></select><br><br><!--#dates.format 是 thymeleaf 格式化日期的方式-->生日:<input type="text" name="birthday"th:value="${user.birthday!=null}?${#dates.format(user.birthday, 'yyyy-MM-dd HH:mm:ss')}"><br><br><button type="submit" class="btn btn-primary">修改</button><br><br></form>
</div>
在线演示源码: src/main/java/com/wmx/thymeleafapp/controller/ExampleController.java · 汪少棠/thymeleafapp - Gitee.com src/main/java/com/wmx/thymeleafapp/pojo/User.java · 汪少棠/thymeleafapp - Gitee.com src/main/resources/templates/examples/httpPut.html · 汪少棠/thymeleafapp - Gitee.com |
格式化日期请求参数
1、页面提交的日期参数,Spring MVC 会自动转换成 Date 类型,默认支持 "/" + ":" 分隔的方式,即年月日必须是 "/" 分割,时分秒必须是 ":" 分割,如 1993/08/25 08:12:22,否则报错: Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'
2、Spring boot 官方文档 默认配置如下,spring.mvc.date-format 默认使用 "/" 格式,如果需要使用其它格式,则在全局配置文件中覆盖即可,如:spring.mvc.date-format=yyyy-MM-dd HH:mm:ss
# SPRING MVC (WebMvcProperties)
spring.mvc.async.request-timeout= # Amount of time before asynchronous request handling times out.
spring.mvc.contentnegotiation.favor-parameter=false # Whether a request parameter ("format" by default) should be used to determine the requested media type.
spring.mvc.contentnegotiation.favor-path-extension=false # Whether the path extension in the URL path should be used to determine the requested media type.
spring.mvc.contentnegotiation.media-types.*= # Map file extensions to media types for content negotiation. For instance, yml to text/yaml.
spring.mvc.contentnegotiation.parameter-name= # Query parameter name to use when "favor-parameter" is enabled.
spring.mvc.date-format= # Date format to use. For instance, `dd/MM/yyyy`.
spring.mvc.dispatch-trace-request=false # Whether to dispatch TRACE requests to the FrameworkServlet doService method.
3、除了在配置文件中指定,也可以使用 org.springframework.web.bind.WebDataBinder API 转换日期。
/*** 自定义日期转换器* Spring3.0 之前是会自动转换的,但是 3.0 之后需要程序员自己转换* 直接将 @InitBinder... 注解的方法放置在 @Controller 中即可** @param dataBinder*/@InitBinderpublic void initBind(WebDataBinder dataBinder) {/**指定日期格式*/DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd HH:mm:ss");/**指定日期/时间解析是否不严格* lenient - 为 true 时,解析过程是不严格的*/dateFormat.setLenient(true);/**Date.class:表示这是注册的是日期类型* new CustomDateEditor(dateFormat, true):true 表示允许为空*/dataBinder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));}
4、无论是 spring.mvc.date-format 还是 WebDataBinder 都需要注意:
1)假如指定格式为 yyyy-MM-dd ,则传入的日期字符串只能是 "-" 分割,如果传入 1993/08/25 则报错
2)假如指定格式为 yyyy-MM-dd ,则传入 1993-08-25 12:08:25 时,时分秒会强制为0,如 1993-08-25 00:00:00
3)假如指定格式为 yyyy-MM-dd HH:mm:ss,则必须同时传入时分秒,否则报错,如传入 1993-08-15 则报错.
在线源码:src/main/java/com/wmx/thymeleafapp/controller/SystemController.java · 汪少棠/thymeleafapp - Gitee.com
HTTP 响应内容压缩
1、程序返回的数据量越大,占用的网络带宽也就越大,响应的时间也就越长,此时对响应数据进行压缩是个不错的优化方式,亲测一个原本返回 1.35M 的接口,在压缩后返回的大小为 154.2KB,压缩率达 90% 左右。
2、浏览器默认是支持数据压缩的,会自动对 gzip 压缩的数据进行解压,F12 打开网络,可以看到请求头中会有:'Accept-Encoding: gzip, deflate, br'。
3、对响应数据开启压缩的最常见的方式有:1)使用 Nginx 配置,2)Spring boot 应用配置(本文介绍此种方式)。
4、Jetty、Tomcat 和 Undertow 都支持 HTTP 响应压缩,对于内嵌的 Servlet 容器而言,直接在 application.properties、application.yml 中配置即可(官网):
server:#如果是微服务环境,所有请求需要通过网关转发和返回时,则以下配置需要配置在网关上,而不是目标微服务上compression:#是否对响应数据开启gzip压缩,默认falseenabled: true#响应内容长度超过设置大小时进行压缩,默认值为2048(2KB,不带单位时默认为字节)min-response-size: 10KB#对指定的响应类型进行压缩,值是数组,用逗号隔开mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml
5、默认情况下,要执行压缩,响应的长度至少为 2048 字节,可以通过 server.compression.min-response-size 属性配置。
6、默认情况下,仅当响应的内容类型为以下内容之一时,才会对其进行压缩,可以通过 mime-types 属性配置:text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xm
l
Spring Boot REST 请求(GetMapping,PostMapping)、格式化日期参数、压缩响应内容相关推荐
- spring boot 项目 前台向后台传递时间参数,插入到数据库中时间会少一天
spring boot 项目 前台向后台传递时间参数,插入到数据库中时间会少一天 分析: 解决办法 分析: 经过测试,时间从前台传到后台数据是一样的,说明是后台向数据库传递过程中出现了问题 解决办法 ...
- Spring Boot 异步请求和异步调用
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 一.Spring Boot中异步请求的使用 1.异步请求与同步请求 ...
- Spring Boot 异步请求和异步调用,一文搞定!
一.Spring Boot中异步请求的使用 1.异步请求与同步请求 特点: 可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在耗时处理完成(例如 ...
- spring boot处理请求返回值的格式(自定义消息转换器)
springboot 将对象转化成json对象返回给前端,是通过多个消息转换器配合完成的 但是有些时候,默认的转化格式未必符合我们的要求,这个时候就需要进行自定义消息转换器 只需要在@Configur ...
- Spring Boot——一种包含分页和排序参数的接收方法DEMO
Maven 主要Maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifac ...
- Spring Boot中使用模板引擎参数化传参数
目录 理论 代码及演示 理论 在导航页里面,当点击某个栏目的时候,就得被激活,在Spring Boot中,一般把导航页做成片段的形式,这个片段是可以根据参数进行激活某一个栏目,如下的演示所示,通过三元 ...
- Spring boot转发请求
转发请求 Forward 表示转发到一个地址 ThymeleafViewResolver Spring MVC的视图解析器 作用,根据视图名,得到视图对象 createView 创建视图对象 view ...
- Spring boot重定向请求
重定向 Redirect 表示重定向到一个地址 ThymeleafViewResolver Spring MVC的视图解析器 作用,根据视图名,得到视图对象 createView 创建视图对象 vie ...
- Spring boot(4) web开发(2) 请求处理、响应处理、模板引擎
参照教程:https://www.bilibili.com/video/BV19K4y1L7MT 1.请求映射 1.1 rest使用与原理 1.1.1 使用 Rest风格支持(使用HTTP请求方式动词 ...
- 学习Spring Boot:(十一) 自定义装配参数
前言 SpringMVC 中 Controller 中方法的参数非常灵活,得益于它的强大自动装配,这次将根据上次遗留下的问题,将研究下装配参数. 正文 SpringMVC中使用了两个接口来处理参数: ...
最新文章
- 呼叫中心最难的问题是什么?
- Tangram base的设计思路
- java arrays.sort() c_正面刚算法-Java中Arrays.sort()(一)
- 苹果Mac操作系统下怎么显示隐藏文件
- 蚂蚁前端的开局十年:一切都在路上
- python random函数_详细代码实战讲解:如何用 Python让自己变成天选之子
- python 将数据写入csv文件
- ZetCode 教程翻译计划正式启动 | ApacheCN
- wh计算公式_“笔记本”电池里的mAh和Wh有啥区别
- Convert.ToInt32、(int)和int.Parse 三者的区别 转
- adb驱动和adb工具官方下载链接
- Android开发者必备工具-常见Android模拟器(MuMu、夜神、蓝叠、逍遥、雷电、Genymotion...)
- mongodb安装及5安装studio 3t和studio3t破解
- leaflet地图原理_Leaflet地图框架使用手册
- android视频添加特效,安卓手机视频特效软件 用手机给视频加特效 安卓手机视频加闪电特效...
- 请结合实例说明欧洲中世纪哥特式建筑的风格特点
- 文件读写处理:古诗问题
- 计算机节熊测试报告,PWC170机能实验.pptx
- imac2017拆机
- VWware虚拟机如何设置固定的IP地址(详细步骤)
热门文章
- 你不知道的outerText,innerText
- Office Tip(1) : Split the Screen
- 漫谈 Clustering (2): k-medoids
- java 启动顺序_java语句执行顺序
- 拓端tecdat|R语言空间可视化:绘制英国脱欧投票地图
- 拓端tecdat|R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析
- 带动量的随机梯度下降法_梯度下降法(SGD)原理解析及其改进优化算法
- 图像处理-绘制直方图
- (9)数据结构-双端队列
- 计算机操作系统笔记(三)