011 v2 基于SpringMVC的REST APIs

REST是一种用于构建存在交互行为的分布式异构系统(heterogeneous systems)的架构风格,Spring对REST的支持是建立在SpringMVC基础上的, 最重要的概念是resource,可以通过Uniform Resource Identifier (URI)标识,比如对于一个博客空间来说,它的资源就包括post, commentuser

resource也可以是一个集合, 表示资源集合,比如, the URI http://www.myblog.com/posts/ 可以包含 0个或者多个Post resources, 每个都有它自己的URI。

对一个资源可以有不同的操作,这个操作可以被表达为一个URI 和相应的HTTP 方法(GET, POST, PUT, DELETE, 等等)。

比如下面就是一些资源操作:
资源操作的例子

最常用的数据交换格式 (ContentTypes)是JSON 和 XML。

基于SpringMVC的REST endpoint 和普通SpringMVC 控制器的区别:
GET区别:

image.png

POST区别:
image.png

注意:如果Controller里面全部是REST endpoints,则@ResponseBody可以直接放到类上,更进一步@Controller + @ResponseBody 可以用@RestController替代

例子:
1. 新建一个工程

image.png

image.png

2. 增加3个实体类
请注意:Post类里面有一个List<Comment>,而Comment类里面有一个Post,即存在双向关联,这会导致JPA marshaling将会无限循环并导致 StackOverflow。解决之道是在back reference加上@JsonIgnore ,即在Comment类中的Pos成员上加上@JsonIgnore; 也可以用@JsonManagedReference修饰Post里面的List<Comment>,用@JsonBackReference修饰Command中的Post(两个Annotation都要用上)。

Note The @JsonManagedReference annotation is used to indicate that the annotated property is part of a two-way linkage between fields and that its role is as a "parent" (or "forward") link. The @JsonBackReference
annotation is also used to indicate that the associated property is part of a two-way linkage between fields, but its role is as a "child" (or "back") link.

image.png

image.png

image.png

3. 增加JPA
image.png

image.png

image.png

4. 自定义异常类
image.png

5. 定义控制器
image.png

image.png

image.png

5. 用POSTMAN去测试
image.png

6. 用RestTemplate写代码来测试
6.1 增加一个数据库脚本
image.png

6.2 增加测试用例
image.png

image.png

image.png

6.3 Run as Junit Test
image.png

提醒:前面提到双向依赖可能导致的堆栈溢出问题,见下面的测试:
image.png

7. 跨域资源共享(Cross-Origin Resource Sharing)

基于安全因素的考虑,浏览器不允许对驻扎在当前域之外的资源发送AJAX请求。CORS specification提供了一种方法可以指明哪个跨域请求是允许的。SpringMVC为REST API endpoints的CORS提供了支持,所以API 的消费者,比如web clients和mobile devices就能调用REST API。


image.png

一般几种方法:

  1. 类级别的@CrossOrigin
  2. 方法级别的@CrossOrigin
  3. 全局CORS配置(见下图):
全局CORS配置
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式。”但是在要求详细讲述它所提出的各个约束,以及如...
    时待吾阅读 3,583评论 0 19
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,926评论 1 92
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,423评论 19 139
  • 对于java中的思考的方向,1必须要看前端的页面,对于前端的页面基本的逻辑,如果能理解最好,不理解也要知道几点。 ...
    神尤鲁道夫阅读 894评论 0 0
  • 亲子咨询中,我会花费很长时间去纠正父母和孩子沟通时候所犯的错误。很多父母抱怨孩子不爱和自己说话,出门是撒欢儿的野马...
    爱家心理阅读 410评论 0 1

友情链接更多精彩内容