RESTful开发风格

传统Web应用的开发,需要显示软件支持HTML编码,会限制Spring MVC 框架在某些场景的应用(微信小程序、手机App/IE浏览器)

REST与RESTful

  • REST(Representational State Transfer)-表现层状态转换,资源在网络中以某种表现形式进行状态转移,是一种理念。说白了,比如在Web环境下如果获取图片/CSS/JS/网页这些资源的时候就要以URL的形式来进行表现。

  • RESTful是基于REST理念的一套开发风格,是具体的开发规则。

  • RESTful最典型的特点-->服务器端只返回(JSON/xml)格式的数据,同时要求返回的数据不包含任何与展现相关的内容

  • 行业中通常将基于RESTful 规则开发的程序称为“前后端分离”

RESTful开发规范:

  • 使用URL作为用户交互入口。

  • 明确的语义规范(GET|POST|PUT|DELETE),根据请求的类型,明确请求的目的,如果是GET请求,那么根据RESTful开发风格这个请求在服务器端的某个Controller只能做查询操作,Post为增加,Put为修改,Delete为删除。put和delete不是web的。

  • 只返回数据(JSON|XML),不包含展现。

RESTful命名要求(对URI的规范)

RESTful 增删改查 · MingCaiXiong/spring-learn@1b510e2

RestController注解

@RestController注解-->在“类”上使用,使用后类中的“方法”上可以不使用“@ResponseBody”注解 方法返回值 就是单纯的数据。而不是路径了

路径变量注解:

简单请求与非简单请求:

  • 简单请求是指标准结构的HTTP请求,对于GET/POST请求

  • 非简单请求是复杂要求的HTTP请求,指PUT/DELETE、扩展标准请求

非简单请求发送过程:

首先,发送预检请求,

如果服务器可以处理“预检请求"并返回数据,则浏览器会将“实际请求”发送给服务器。

如果服务器不能处理“预见请求",则浏览器不会再次发送“实际请求”这样就可以减轻服务器的压力

因为历史问题,springMVC需要对非简单请求做过滤器配置:

  • web.xml添加过滤器
<filter>
    <filter-name>formContentFilter</filter-name>
    <filter-class>org.springframework.web.filter.FormContentFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>formContentFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

SpringMVC进行JSON序列化支持:

  • fastjackson-->json 序列化工具>>>这个工具的2.9版本之前有系统漏洞,所以使用时 一定要使用2.9以后的版本。
  • 在pom.xml中导入依赖
<!-- json核心包-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.9</version>
</dependency>
<!-- json和目标对象交互-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.9</version>
</dependency>
<!-- json注解支持-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.9</version>
</dependency>

SpringMVC返回json

  • 对象序列化与集合序列化,如果请求Controlle对应的方法返回是一个对象或者集合,且Controller类添加注解@RestController或者方法上有注解@ResponseBody,那么在引入依赖后,Spring MVC会自动将对象转换为Json字符串:

  • Json对时间处理上不是很理想,对于Java程序中的时间,Json序列化的结果是从1970年到Java程序时间的毫秒数,所以要特殊处理,对于要序列化的日期变量要,timezone的数值是时区偏移,北京要偏移8个小时:
  // 日期转换case
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
  private Date date;

史上最全的Jackson框架使用教程

史上最全的Jackson框架使用教程 - Java技术大联盟的个人空间 - OSCHINA - 中文开源技术交流社区