本教程提供了有关如何使用Spring Boot构建Restfull Web服务的分步指南。

先决条件:

  • Eclipse IDE(最新版本)
  • Maven的4
  • Java 1.8

1.创建Maven Web项目

打开eclipse,然后创建一个新的Maven Web项目,并将其命名为SpringBootRest。

生成的项目的结构如下所示:

2. pom.xml

创建Web项目之后,第一步是在pom.xml内配置Spring Boot ,因此我们将以下内容添加为父依赖项:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version>
</parent>

Spring Boot公开了一个名为spring-boot-starter-web的启动程序依赖项,该依赖项会自动导入开发和公开REST控制器所需的所有必需jar。 因此,我们将其添加为依赖项:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

在本教程中,我们使用Spring Boot提供的嵌入式tomcat,因此我们将包装属性设置为jar,从而将应用程序构建为可运行的jar文件:

<packaging>jar</packaging>

PS:如果要使用外部tomcat,请参阅“在外部tomcat上部署Spring Boot应用程序” 。

最后的配置步骤是添加Spring Boot插件:

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

从字面上看,这就是我们开始开发REST控制器所需要的。

以下是Spring Boot自动导入的jar:

这是整个pom.xml供参考:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.programmer.gate</groupId><artifactId>SpringBootRest</artifactId><packaging>jar</packaging><version>0.0.1-SNAPSHOT</version><name>SpringBootRest</name><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

3. Application.java

第二步是创建Spring Boot初始化器类,这是我们应用程序的入口。 用@SpringBootApplication注释类等效于在传统的Spring应用程序中使用@Configuration,@EnableAutoConfiguration和@ComponentScan及其默认属性。

package com.programmer.gate;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application{public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

PS:默认情况下,servlet容器会自动扫描在初始化程序的同一程序包中定义的REST控制器,该程序包外部定义的任何控制器都将被忽略。

4.实施REST资源

我们将实现一个非常基本的支付API,向客户收取购买商品的费用。

感谢jackson库,我们的API仅接受JSON请求并以JSON响应进行响应,这使我们能够将请求和响应作为POJO类处理,而不必担心JSON / POJO转换。

以下是客户应在每个付款请求上提交的付款请求类别:

package com.programmer.gate;public class PaymentRequest {private int userId;private String itemId;private double discount;public String getItemId() {return itemId;}public void setItemId(String itemId) {this.itemId = itemId;}public double getDiscount() {return discount;}public void setDiscount(double discount) {this.discount = discount;}public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}}

这是从我们的服务返回的基本响应:

package com.programmer.gate;public class BaseResponse {private String status;private Integer code;public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}}

现在,我们定义下com.programmer.gate命名为PaymentController控制器

package com.programmer.gate;import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/payment")
public class PaymentController {private final String sharedKey = "SHARED_KEY";private static final String SUCCESS_STATUS = "success";private static final String ERROR_STATUS = "error";private static final int CODE_SUCCESS = 100;private static final int AUTH_FAILURE = 102;@RequestMapping(value = "/pay", method = RequestMethod.POST)public BaseResponse pay(@RequestParam(value = "key") String key, @RequestBody PaymentRequest request) {BaseResponse response = new BaseResponse();if(sharedKey.equalsIgnoreCase(key)){int userId = request.getUserId();String itemId = request.getItemId();double discount = request.getDiscount();// Process the request// ....// Return success response to the client.response.setStatus(SUCCESS_STATUS);response.setCode(CODE_SUCCESS);}else{response.setStatus(ERROR_STATUS);response.setCode(AUTH_FAILURE);}return response;}
}

我们的控制器提供的唯一服务是pay()方法,该方法看起来非常简单,它使用预定义的共享密钥验证客户端请求,处理请求并以操作状态进行响应。

以下是控制器使用的常见注释:

  • @RestController:此注释将类标记为资源,它隐式定义了@Controller@ResponseBody mvc注释,当使用@RestController注释类时 无需在方法返回的POJO类旁边编写@ResponseBody
  • @RequestMapping:除了方法类型: GET / POST之外 ,此注释还定义了资源的url,在我们的示例中,我们将付款服务公开为POST ,可通过/ payment / pay访问
  • @RequestParam:此注释表示特定的请求参数,在我们的示例中,我们将名为key的请求参数映射到String类型的参数
  • @RequestBody:此批注表示请求的主体,在我们的示例中,我们将请求的主体映射到类型为PaymentRequestPOJO(jackson处理JSON / POJO转换)

注意到响应以BaseResponse表示,不需要注释, 杰克逊将其隐式转换为JSON。

5.部署应用程序

以下是部署我们的应用程序的步骤:

  • 右键单击pom.xml- >运行方式-> Maven安装
  • Maven在目标文件夹内生成一个名为SpringBootRest-0.0.1-SNAPSHOT.jar的jar文件
  • 打开cmd,然后使用以下命令运行jar: java -jar SpringBootRest-0.0.1-SNAPSHOT.jar

到这里,我们的应用程序启动,并准备在默认端口8080上处理请求。

6.测试服务

为了测试我们的API,我们使用来自chrome的Advanced REST客户端插件,并发起2个不同的请求:

成功的请求:在此请求中,我们将有效的共享密钥作为请求参数以及请求正文中的项目详细信息传递。 它是这样的:

这是我们的回应:

{"status": "success","code": 100
}

失败请求:此请求看起来与上面相似,但是共享密钥无效,这是我们从API中获得的:

{"status": "error","code": 102
}

就是这样,希望您发现它有用。

翻译自: https://www.javacodegeeks.com/2018/03/build-rest-web-service-using-spring-boot.html

使用Spring Boot构建REST Web服务相关推荐

  1. Spring Boot 构建RESTful Web服务

    Spring Boot 构建RESTful Web服务 本指南将引导您完成使用Spring 创建" Hello World" RESTful Web服务的过程. 你会建立什么 您将 ...

  2. 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务

    Spring,构建 Java™ 平台和 Enterprise Edition (Java EE) 应用程序的著名框架,现在在其模型-视图-控制器(Model-View-Controller ,MVC) ...

  3. spring boot构建基础版web项目(一)springboot、thymeleaf控制层基础构

    原文作者:弥诺R 原文地址:http://www.minuor.com/147852147/article 转载声明:转载请注明原文地址,注意版权维护,谢谢! 写前说明 根据个人在各篇博文中看到的信息 ...

  4. Spring微服务实战第2章 使用Spring Boot构建微服务

    第2章 使用Spring Boot构建微服务 基于微服务的架构具有以下特点. 有约束的--微服务具有范围有限的单一职责集.微服务遵循UNIX的理念,即应用程序是服务的集合,每个服务只做一件事,并只做好 ...

  5. 使用Spring Boot构建微服务(文末福利)

    本文主要内容 学习微服务的关键特征 了解微服务是如何适应云架构的 将业务领域分解成一组微服务 使用Spring Boot实现简单的微服务 掌握基于微服务架构构建应用程序的视角 学习什么时候不应该使用微 ...

  6. Spring Boot WebFlux-02——WebFlux Web CRUD 实践

    Spring Boot WebFlux-02--WebFlux Web CRUD 实践 第02课:WebFlux Web CRUD 实践 上一篇基于功能性端点去创建一个简单服务,实现了 Hello.这 ...

  7. 使用Angular,Ionic 4和Spring Boot构建移动应用

    朋友不允许朋友写用户身份验证. 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK. 在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 我是Ionic的忠实粉丝. 几年 ...

  8. 使用React和Spring Boot构建一个简单的CRUD应用

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. Reac ...

  9. 学习笔记-Spring Boot 开发 RESTful Web API(一)

    题记: 本篇是Spring Boot 开发学习系列中基础知识学习的一部分,为 RESTful Web API 相关基础知识,为实践操作奠定理论基础. REST不是一个标准,而是一种软件应用架构风格.基 ...

最新文章

  1. Crystal Reports图表(上)
  2. linux内核网络协议栈--数据包的发送过程(二十一)
  3. MySQL具体解释(21)------------缓存參数优化
  4. 关于移动,联通,电信的区分。
  5. 水准网测量平差matlab_【干货】史诗级测量大神分享道路测量全过程经验
  6. 详解ASP.NET页面生命周期事件
  7. 【C#】详解C#异常
  8. sql 两大类 DDL数据定义语言 和DCL数据控制语言
  9. 【论文写作】毕业论文写作的基本流程
  10. 字节跳动面试分享:java从入门到精通第五版答案位置
  11. python生成手写汉字字体_「zi2zi」:用AI生成自己的手写字体
  12. c++配合Cheat Engine实现cs1.6外挂
  13. 服务机器人工程师(ROS)要求汇总220331
  14. phyton的函数与类的学习
  15. 保存网页内容 自动过滤广告和网页头尾
  16. Python骚操作:Python控制Excel实现自动化办公
  17. matlab单片机仿真,51单片机proteus仿真实验设计
  18. 【数据库优化】记一次引入Elasticsearch的系统架构实战
  19. Unity报错:Assertion failed on expression: ‘IsMatrixValid(matrix)‘...的解决办法
  20. pandas 玩转 Excel 操作总结

热门文章

  1. 从NIO到Netty开发
  2. 深入理解分布式系统中的缓存架构(下)
  3. 这些排序算法的使用时机,你都知道吗?
  4. Java基于socket服务实现UDP协议的方法
  5. 并发场景下MySQL存在的问题及解决思路
  6. 面象对象设计6大原则之一:单一职责原则
  7. SpringCloud注册中心高可用搭建
  8. methods中axios里的数据无法渲染到页面
  9. 端午前夕的班级小游戏
  10. Feign数据压缩传输