文档章节

Springboot 实现 Restful 服务,基于 HTTP / JSON 传输

泥沙砖瓦浆木匠
 泥沙砖瓦浆木匠
发布于 2017/02/17 13:27
字数 1186
阅读 260
收藏 3

 

“怎样的人生才是没有遗憾的人生?我的体会是:(1)拥有健康;(2)创造“难忘时刻”;(3)尽力做好自己,不必改变世界;(4)活在当下。” – 《向死而生》李开复

基于上一篇《Springboot 整合 Mybatis 的完整 Web 案例》,这边我们着重在 控制层 讲讲。讲讲如何在 Springboot 实现 Restful 服务,基于 HTTP / JSON 传输。

一、运行 springboot-restful 工程

git clone 下载工程 springboot-learning-example ,项目地址见 GitHub – https://github.com/JeffLi1993/springboot-learning-example。下面开始运行工程步骤(Quick Start):

 

1.数据库准备

a.创建数据库 springbootdb:

CREATE DATABASE springbootdb;

b.创建表 city :(因为我喜欢徒步)

DROP TABLE IF EXISTS  `city`;

CREATE TABLE `city` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘城市编号’,

  `province_id` int(10) unsigned  NOT NULL COMMENT ‘省份编号’,

  `city_name` varchar(25) DEFAULT NULL COMMENT ‘城市名称’,

  `description` varchar(25) DEFAULT NULL COMMENT ‘描述’,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

c.插入数据

INSERT city VALUES (1 ,1,’温岭市’,’BYSocket 的家在温岭。’);

 

2. springboot-restful 工程项目结构介绍

springboot-restful 工程项目结构如下图所示:

org.spring.springboot.controller – Controller 层

org.spring.springboot.dao – 数据操作层 DAO

org.spring.springboot.domain – 实体类

org.spring.springboot.service – 业务逻辑层

Application – 应用启动类

application.properties – 应用配置文件,应用启动会自动读取配置

 

3.改数据库配置

打开 application.properties 文件, 修改相应的数据源配置,比如数据源地址、账号、密码等。(如果不是用 MySQL,自行添加连接驱动 pom,然后修改驱动名配置。)

 

4.编译工程

在项目根目录 springboot-learning-example,运行 maven 指令:

mvn clean install

 

5.运行工程

右键运行 springboot-restful 工程 Application 应用启动类的 main 函数。

用 postman 工具可以如下操作,

根据 ID,获取城市信息

GET http://127.0.0.1:8080/api/city/1

获取城市列表

GET http://127.0.0.1:8080/api/city

新增城市信息

POST http://127.0.0.1:8080/api/city

更新城市信息

PUT http://127.0.0.1:8080/api/city

删除城市信息

DELETE http://127.0.0.1:8080/api/city/2

 

二、springboot-restful 工程控制层实现详解

1.什么是 REST?

REST 是属于 WEB 自身的一种架构风格,是在 HTTP 1.1 规范下实现的。Representational State Transfer 全称翻译为表现层状态转化。Resource:资源。比如 newsfeed;Representational:表现形式,比如用JSON,富文本等;State Transfer:状态变化。通过HTTP 动作实现。

理解 REST ,要明白五个关键要素:

资源(Resource)

资源的表述(Representation)

状态转移(State Transfer)

统一接口(Uniform Interface)

超文本驱动(Hypertext Driven)

 

6 个主要特性:

面向资源(Resource Oriented)

可寻址(Addressability)

连通性(Connectedness)

无状态(Statelessness)

统一接口(Uniform Interface)

超文本驱动(Hypertext Driven)

具体这里就不一一展开,详见 http://www.infoq.com/cn/articles/understanding-restful-style

 

2.Spring 对 REST 支持实现

CityRestController.java 城市 Controller 实现 Restful HTTP 服务

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

public class CityRestController {

 

    @Autowired

    private CityService cityService;

 

    @RequestMapping(value = "/api/city/{id}", method = RequestMethod.GET)

    public City findOneCity(@PathVariable("id") Long id) {

        return cityService.findCityById(id);

    }

 

    @RequestMapping(value = "/api/city", method = RequestMethod.GET)

    public List<City> findAllCity() {

        return cityService.findAllCity();

    }

 

    @RequestMapping(value = "/api/city", method = RequestMethod.POST)

    public void createCity(@RequestBody City city) {

        cityService.saveCity(city);

    }

 

    @RequestMapping(value = "/api/city", method = RequestMethod.PUT)

    public void modifyCity(@RequestBody City city) {

        cityService.updateCity(city);

    }

 

    @RequestMapping(value = "/api/city/{id}", method = RequestMethod.DELETE)

    public void modifyCity(@PathVariable("id") Long id) {

        cityService.deleteCity(id);

    }

}

具体 Service 、dao 层实现看代码GitHub https://github.com/JeffLi1993/springboot-learning-example/tree/master/springboot-restful

 

代码详解:

@RequestMapping 处理请求地址映射。

method – 指定请求的方法类型:POST/GET/DELETE/PUT 等

value – 指定实际的请求地址

consumes – 指定处理请求的提交内容类型,例如 Content-Type 头部设置application/json, text/html

produces – 指定返回的内容类型

@PathVariable URL 映射时,用于绑定请求参数到方法参数

@RequestBody 这里注解用于读取请求体 boy 的数据,通过 HttpMessageConverter 解析绑定到对象中

 

3.HTTP 知识补充

GET            请求获取Request-URI所标识的资源

POST          在Request-URI所标识的资源后附加新的数据

HEAD         请求获取由Request-URI所标识的资源的响应消息报头

PUT            请求服务器存储一个资源,并用Request-URI作为其标识

DELETE       请求服务器删除Request-URI所标识的资源

TRACE        请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT  保留将来使用

OPTIONS   请求查询服务器的性能,或者查询与资源相关的选项和需求

详情请看《JavaEE 要懂的小事:一、图解Http协议

 

三、小结

Springboot 实现 Restful 服务,基于 HTTP / JSON 传输,适用于前后端分离。这只是个小demo,没有加入bean validation这种校验。还有各种业务场景。

推荐:《 Springboot 整合 Mybatis 的完整 Web 案例

欢迎扫一扫我的公众号关注 — 及时得到博客订阅哦!

— http://www.bysocket.com/ —

— https://github.com/JeffLi1993 —

© 著作权归作者所有

共有 人打赏支持
泥沙砖瓦浆木匠

泥沙砖瓦浆木匠

粉丝 797
博文 139
码字总数 170656
作品 4
杭州
程序员
SpringBoot RESTful 应用中的异常处理小结

@ControllerAdvice 和 @ExceptionHandler 的区别 ExceptionHandler, 方法注解, 作用于 Controller 级别. ExceptionHandler 注解为一个 Controler 定义一个异常处理器. ControllerAdvice, 类注......

xiaogong1688
06/29
0
0
补习系列-springboot-restful应用

一、目标 了解 Restful 是什么,基本概念及风格; 能使用SpringBoot 实现一套基础的 Restful 风格接口; 利用Swagger 生成清晰的接口文档。 二、Restful 入门 什么是REST 摘自百科的定义:R...

美码师
08/05
0
0
Spring Boot入门资料整理

Spring Boot 初识 SpringBoot前世今生 本文主要讲述spring boot的由来,即其它诞生的背景,初衷,现状,及对未来的展望。 Spring Boot参考指南中文版--Chapter1.Spring Boot中文文档 本节提供...

小致dad
2017/11/07
0
0
补习系列-springboot mime类型处理

目标 了解http常见的mime类型定义; 如何使用springboot 处理json请求及响应; 如何使用springboot 处理 xml请求及响应; http参数的获取及文件上传下载; 如何获得原始请求的字节流; 6.了解...

美码师
07/17
0
0
Spring Boot 全家桶 - SpringBootBucket

Spring Boot 现在已经成为Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通过“一...

一刀
03/05
0
1

没有更多内容

加载失败,请刷新页面

加载更多

Mac OS 最强鼠标改键软件:BetterAndBetter

官网: http://www.better365.cn 话不多说,先上你们最喜欢的软件界面截图。 通用: 触摸板: 鼠标: 键盘: 情景模式: 文本跳窗(自动跳窗): 四角触发: 工具箱: 脚本: 关于: 说下我目...

故国有明
40分钟前
16
0
Hbase Schema 模型设计注意事项及示例

一、Hbase 数据模型概述 HBase的数据模型也是由表组成,每一张表里也有数据行和列,但是在HBase数据库中的行和列又和关系型数据库的稍有不同。 表(Table): HBase会将数据组织成一张表,表名必...

PeakFang-BOK
今天
6
0
Blockathon(2018)上海竞赛项目成果今天揭晓

开幕式现场 10月19日,Blockathon(2018)上海在黄浦区P2联合创业办公社举行,本次活动由50名区块链开发者组成9支参赛队伍,来自国内外优秀区块链开发团队的20名技术专家担任导师及裁判。9支队...

HiBlock
今天
6
0
微信小程序开发系列六:微信框架API的调用

微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发...

JerryWang_SAP
今天
12
0
5 个用 Python 编写 web 爬虫的方法

大家在读爬虫系列的帖子时常常问我怎样写出不阻塞的爬虫,这很难,但可行。通过实现一些小策略可以让你的网页爬虫活得更久。那么今天我就将和大家讨论这方面的话题。 我刚整理了一套2018最新...

糖宝lsh
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部