1.5 第五章 接口架构风格—RESTful
1.5.1 认识 REST REST(英文:Representational State Transfer,简称 REST) 一种互联网软件架构设计的风格,但它并不是标准,它只是提出了一组客户端和服务器交 互时的架构理念和设计原则,基于这种理念和原则设计的接口可以更简洁,更有层次,REST 这个词,是 Roy Thomas Fielding 在他 2000 年的博士论文中提出的。
任何的技术都可以实现这种理念,如果一个架构符合 REST 原则,就称它为 RESTFul 架构
比如我们要访问一个 http 接口:http://localhost:8080/boot/order?id=1021&status=1
采用 RESTFul 风格则 http 地址为:http://localhost:8080/boot/order/1021/1
1.5.2 RESTful 的注解 Spring Boot 开发 RESTful 主要是几个注解实现
(1) @PathVariable 获取 url 中的数据 该注解是实现 RESTFul 最主要的一个注解
(2) @PostMapping 接收和处理 Post 方式的请求
(3) @DeleteMapping 接收 delete 方式的请求,可以使用 GetMapping 代替
(4) @PutMapping 接收 put 方式的请求,可以用 PostMapping 代替
(5) @GetMapping 接收 get 方式的请求
1.5.3 RESTful 优点
➢ 轻量,直接基于 http,不再需要任何别的诸如消息协议 get/post/put/delete 为 CRUD 操作
➢ 面向资源,一目了然,具有自解释性。
➢ 数据描述简单,一般以 xml,json 做数据交换。
➢ 无状态,在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,不用考虑当前状态, 极大的降低了复杂度。
➢ 简单、低耦合
1.5.4 注解练习
1.5.4.1 编写 Controller
@org.springframework.web.bind.annotation.RestController
public class RestController {
@GetMapping(value = "/student/{studentid}/{studentname}")
public String querySchool(
@PathVariable(value = "studentid")
Integer id,
@PathVariable(value = "studentname")
String name){
return "get请求,查询学生id"+id+"名字:"+name;
}
}
application.properties 文件
启用 HiddenHttpMethodFilter 这个过滤器, 支持 post 请求转为 put,delete
spring.mvc.hiddenmethod.filter.enabled=true
使用 Postman 模拟发送请求,进行测试
1.5.4.3 请求路径冲突
@GetMapping(value = "/student/{studentId}/{classname}")
@GetMapping(value = "/student/{studentId}/{schoolname}")
这样的路径访问会失败, 路径有冲突。
解决:设计路径,必须唯一, 路径 uri 和 请求方式必须唯一。
1.5.4.4 RESTful 总结
➢ 增 post 请求、删 delete 请求、改 put 请求、查 get 请求
➢ 请求路径不要出现动词 例如:查询订单接口 /boot/order/1021/1(推荐) /boot/queryOrder/1021/1(不推荐)
➢ 分页、排序等操作,不需要使用斜杠传参数 例如:订单列表接口/boot/orders?page=1&sort=desc 一般传的参数不是数据库表的字段,可以不采用斜杠
1.8 Spring Boot 打包
Spring Boot 可以打包为 war 或 jar 文件。以两种方式发布应用
1.8.1 Spring Boot 打包为 war
1.8.1.1 pom.xml
在 pom.xml 文件中配置内嵌 Tomcat 对 jsp 的解析包
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>mywar</finalName>
<resources>
<!--mybatis 他的 xml 文件放置 src/main/java 目录-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--指定 resources 下面的所有资源-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
<!--指定 jsp 文件编译后目录-->
<resource>
<directory>src/main/webapp</directory>
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
创建 jsp 文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
打war包,取得数据为:${data}
</body>
</html>
创建 WarController
@Controller
public class WarController {
@RequestMapping("/mywar")
public String warcontroller(HttpServletRequest request){
request.setAttribute("data","往war中存数据");
return "index";
}
}
设置视图解析器
server.port=9095
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
启动主类,在浏览器访问地址 index
主启动类继承 SpringBootServletInitializer:继承 SpringBootServletInitializer 可以使用外部 tomcat。 SpringBootServletInitializer 就是原有的 web.xml 文件的替代。使用了嵌入式 Servlet,默 认是不支持 jsp。
@SpringBootApplication
public class Springboot03Application extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(Springboot03Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Springboot03Application.class);
}
}
发布打包后的 war 到 tomcat:
target 目录下的 war 文件拷贝到 tomcat 服务器 webapps 目录中,启动 tomcat。
在浏览器访问 web 应用
1.8.2 Spring Boot 打包为 jar
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>myjar</finalName>
<resources>
<!--mybatis 他的 xml 文件放置 src/main/java 目录-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--指定 resources 下面的所有资源-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
<!--指定 jsp 文件编译后目录-->
<resource>
<directory>src/main/webapp</directory>
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--带有 jsp 的程序,打包为 jar,必须用这个版本-->
<version>1.4.2.RELEASE</version>
</plugin>
</plugins>
</build>
创建 jsp 文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
打jar包,取得数据为:${data}
</body>
</html>
创建 Controller
@Controller
public class WarController {
@RequestMapping("/myjar")
public String warcontroller(HttpServletRequest request){
request.setAttribute("data","往jar中存数据");
return "index";
}
}
application.properties
server.port=9999
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
启动 Application,在浏览器访问应用
执行 jar,启动内置的 tomcat java –jar myjar.jar
浏览器访问 web 应用
1.9使用mybatis生成器生成实体类,mapper.xml,mapper接口:
pom依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--mybatis代码自动生成插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!--配置文件的位置-->
<configurationFile>GeneratorMapper.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
使用GeneratorMapper.xml文件(一定要放在根目录下):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 指定连接数据库的JDBC驱动包所在位置,指定到你本机的完整路径 -->
<classPathEntry location="E:\mysql-connector-java-8.0.30.jar"/>
<!-- 配置table表信息内容体,targetRuntime指定采用MyBatis3的版本 -->
<context id="tables" targetRuntime="MyBatis3">
<!-- 抑制生成注释,由于生成的注释都是英文的,可以不让它生成 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 配置数据库连接信息 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8"
userId="root"
password="ztb">
</jdbcConnection>
<!-- 生成model类,targetPackage指定model类的包名, targetProject指定生成的model放在eclipse的哪个工程下面-->
<javaModelGenerator targetPackage="com.ztb.pojo"
targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="false" />
</javaModelGenerator>
<!-- 生成MyBatis的Mapper.xml文件,targetPackage指定mapper.xml文件的包名, targetProject指定生成的mapper.xml放在eclipse的哪个工程下面 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 生成MyBatis的Mapper接口类文件,targetPackage指定Mapper接口类的包名, targetProject指定生成的Mapper接口放在eclipse的哪个工程下面 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.ztb.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 数据库表名及对应的Java模型类名 -->
<table tableName="user" domainObjectName="User"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"/>
</context>
</generatorConfiguration>
双击插件生成器生成:
标签:xml,springboot,tomcat,spring,简单,boot,springframework,使用,org From: https://www.cnblogs.com/zhangtaibing/p/16651032.html