Spring Boot简介:用Java创建简单的REST API


由于繁琐的依赖关系配置,为企业应用程序配置Spring变得非常繁琐且容易出错。 对于还使用多个第三方库的应用程序尤其如此。


每次创建另一个基于Spring的企业Java应用程序时,都需要重复相同的例程步骤来配置它:


  • 根据所创建的应用程序类型(Spring MVC,Spring JDBC,Spring ORM等),导入必要的Spring模块
  • 导入Web容器库(用于Web应用程序)
  • 导入必要的第三方库(例如,Hibernate,Jackson),同时应查找与指定的Spring版本兼容的版本
  • 配置DAO组件,例如:数据源,事务管理等。
  • 配置Web层组件,例如:资源管理器,视图解析器
  • 定义一个将加载所有必要配置的类。

1.介绍Spring Boot


Spring的作者决定为开发人员提供一些实用程序,这些实用程序可以自动执行配置过程并加快创建和部署Spring应用程序的过程,统称为Spring Boot。


Spring Boot是一个有用的项目,其目标是简化基于Spring的应用程序的创建。 它允许您以最简单的方式创建Web应用程序,而开发人员只需花费很少的精力即可配置和编写代码。


2. Spring Boot的功能


Spring Boot具有强大的功能,但最重要的功能是:依赖关系管理,自动配置和内置的servlet容器


2.1。 轻松的依赖管理


为了加快依赖关系管理过程,Spring Boot隐式包装了每种基于Spring的应用程序所需的第三方依赖关系,并通过所谓的入门包(spring-boot-starter-web,spring-boot-starter-data-jpa等)将其提供给开发人员。 .d。)


入门包是可以在应用程序中包含的一组便捷的依赖项描述符。 这将为所有与Spring相关的技术提供一个通用的解决方案,从而避免程序员不必要地搜索代码示例并从中加载所需的依赖项描述符(此类描述符和入门包的示例如下所示)


例如,如果您想开始使用Spring Data JPA访问数据库,只需在项目中包含spring-boot-starter-data-jpa依赖项就可以了(您不必寻找兼容的数据库驱动程序和Hibernate库)


如果要创建Spring Web应用程序,只需添加spring-boot-starter-web依赖项,即可将开发Spring MVC应用程序所需的所有库(例如spring-webmvcjackson-jsonvalidation-apiTomcat)引入项目中。


换句话说, Spring Boot收集了所有常见的依赖关系并在一个地方定义了它们,这使开发人员可以简单地使用它们,而不必在每次创建新应用程序时都浪费时间


因此,当使用Spring Boot时pom.xml文件包含的行比在Spring应用程序中使用的行少


请参阅所有Spring Boot入门包文档


2.2。 自动配置


第二个出色的Spring Boot功能是自动应用程序配置


选择合适的入门包之后, Spring Boot将尝试根据您添加的jar依赖项自动配置Spring应用程序


例如,如果添加Spring-boot-starter-web ,Spring Boot将自动配置注册的bean,例如DispatcherServletResourceHandlersMessageSource


如果使用spring-boot-starter-jdbcSpring Boot会自动注册DataSourceEntityManagerFactoryTransactionManager Bean,并从application.properties文件读取用于连接数据库的信息。


如果您不打算使用数据库,并且不提供有关手动模式下连接的任何详细信息,Spring Boot将自动在内存中配置数据库,而无需您进行任何其他配置(如果有H2或HSQL库)


可以随时通过用户设置完全重新定义自动配置


2.3。 对应用程序服务器的本机支持-Servlet容器


每个Spring Boot Web应用程序都包含一个嵌入式Web服务器。 看一下开箱即用支持 servlet容器列表


开发人员不再需要担心配置servlet容器并在其上部署应用程序。 现在,应用程序可以使用内置服务器作为可执行的jar文件自行启动


如果需要使用单独的HTTP服务器,则只需为此排除默认依赖项即可。 Spring Boot为不同的HTTP服务器提供了单独的入门包


用嵌入式服务器创建独立的Web应用程序不仅方便开发,而且是企业级应用程序可接受的解决方案,并且在微服务领域中变得越来越有用。 在独立且可完全部署的工件中快速打包整个服务(例如用户身份验证)的能力还提供了API,这使得应用程序的安装和部署更加容易


3. Spring Boot安装要求


要配置和运行Spring Boot应用程序,需要以下内容:


  • Java 8+
  • Apache Maven 3.x

4.创建一个Spring Boot应用程序


现在让我们练习并实现一个非常简单的REST API,以使用Spring Boot的功能来接受付款


4.1。 使用Maven创建一个Web项目


在您使用的IDE中创建一个Maven项目,将其称为SpringBootRestService


确保使用Java 8+版本,因为Spring Boot不适用于早期版本


4.2。 Pom.xml配置


第二步是在pom.xml文件中配置Spring Boot


所有Spring Boot应用程序都是从spring-boot-starter-parent配置的 ,因此在进一步定义依赖项之前,请按如下所示添加starter-parent


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

因为 由于我们正在创建REST API,因此有必要使用spring-boot-starter-web作为依赖项,它隐式定义了所有其他依赖项,例如spring-corespring-webspring-webmvcservlet apijackson-databind库,因此只需将以下内容添加到pom.xml中:


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

现在,以下jar库将自动导入到您的项目中:


图片


下一步是添加Spring Boot插件:


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

最后一步是使Maven在组装过程中生成可执行的jar文件:


 <packaging>jar</packaging> 

以下是完整的pom.xml文件:


 <?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>springboot.topjava.ru</groupId> <artifactId>SpringBootRestService</artifactId> <version>1.0</version> <packaging>jar</packaging> <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>2.1.1.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> 

如您所见,使用一个依赖项,我们可以创建功能齐全的Web应用程序


4.3。 创建REST资源


现在,我们将创建一个付款控制器以及POJO类,用于请求和响应


让我们编写付款请求的类别:


 package springboot.topjava.ru; 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 springboot.topjava.ru; public class BaseResponse { private final String status; private final Integer code; public BaseResponse(String status, Integer code) { this.status = status; this.code = code; } public String getStatus() { return status; } public Integer getCode() { return code; } } 

现在创建一个控制器:


 package springboot.topjava.ru; import org.springframework.web.bind.annotation.*; @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; @GetMapping public BaseResponse showStatus() { return new BaseResponse(SUCCESS_STATUS, 1); } @PostMapping("/pay") public BaseResponse pay(@RequestParam(value = "key") String key, @RequestBody PaymentRequest request) { final BaseResponse response; 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 = new BaseResponse(SUCCESS_STATUS, CODE_SUCCESS); } else { response = new BaseResponse(ERROR_STATUS, AUTH_FAILURE); } return response; } } 

4.4。 创建主应用程序类


最后一步是创建配置类并启动应用程序。 Spring Boot支持新的@SpringBootApplication批注,等效于使用@ Configuration@ EnableAutoConfiguration@ComponentScan及其默认属性


因此,您只需要创建一个带有@SpringBootApplication注释的类,Spring Boot将启用自动配置并扫描当前包中的资源:


 package springboot.topjava.ru; 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); } } 

5.部署Spring Boot应用程序


现在,让我们利用Spring Boot的第三大功能-它是嵌入式服务器。 我们需要做的就是使用Maven创建一个可执行的jar文件,并像普通的独立应用程序一样运行它:


  • 进入命令行模式(cmd命令),转到带有pom.xml的文件夹,然后输入mvn clean package命令
  • Maven将生成一个名为SpringBootRestService-1.0.jar的可执行jar文件。
  • 转到cd目标文件夹
  • 然后运行jar文件: java -jar SpringBootRestService-1.0.jar
  • 转到浏览器,位于http://本地主机:8080 /付款

我们的REST API正在运行,并准备通过端口8080(默认情况下)处理请求


在本文中,我们研究了Spring Boot的功能,并使用嵌入式服务器创建了一个完整的示例。


资料来源:
https://dzone.com/articles/introducing-spring-boot


在翻译中,信息已更新:


  • Spring-boot-starter-parent将版本从1.5.8.RELEASE更改为2.1.1.RELEASE,因此Maven提取的库列表已更新
  • 删除了Spring存储库声明,从中央存储库中提取了依赖项
  • 在BaseResponse类中,字段设置为final,添加了构造函数,并删除了setter
  • 在PaymentController中,我们通过@GetMapping引入了showStatus()方法,以在浏览器中测试应用程序
  • 用@ GetMapping / @ PostMapping替换方法中的@RequestMapping
  • 还进行了更改以从命令行部署应用程序

更新:


正如Lure_of_Chaos指出的那样,现在可以通过SPRING INITIALIZR自动完成所有操作。 并且无需离开您最喜欢的JetBrains IntelliJ IDEA

Source: https://habr.com/ru/post/zh-CN435144/


All Articles