Spring Boot
非常适合
Web
应用程序开发,可以使用嵌入式
Tomcat
、
Jetty
、
Undertow
或
Netty
创建一个
HTTP
服务器,大多数
Servlet Web
应用程序使用
spring-boot-starter-web
模块来快速启动和运行,还可以选择使用
spring-boot-starter-webflux
模块构建响应式(
Reactive
)
Web
应用程序。
Spring Web MVC
框架(通常称为
Spring MVC
)是一个丰富的模型(
Model
)、视图(
View
)、控制器(
Controller
)
Web
框架,
Spring MVC
允许创建特殊的
Bean
(控制器,使用
@Controller
或
@RestControllerbean
注解的类)来处理传入的
HTTP
请求,控制器中的方法通过使用
@RequestMapping
注解映射到对应的
HTTP
请求。
Servlet Web模块
spring-boot-starter-web
模块依赖
spring-web
模块和
spring-webmvc
模块。
-
提供了核心的Spring Web
集成,包括一些方便的HTTP
过滤器、Servlet
调用程序、与其他Spring HTTP
框架和Web
技术(如HTTP
、Hessian
)集成的基础结构。Burlap
-
是Spring Web MVC
的一个实现,Spring MVC
依赖于Spring Web MVC
。如果不使用Spring Web
,但需要使用Spring MVC
支持的其他与Spring
相关的技术,那么应该依赖Web
。Spring Web
spring-web
模块提供了大多数处理
HTTP
请求的注解。
spring-context
模块提供了
Controller
注解。
HTTP
请求方法的
Java
枚举类
RequestMethod
,旨在与
RequestMapping
注解的
method
属性一起使用。
package org.springframework.web.bind.annotation;
public enum RequestMethod {
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
}
演示代码
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
</parent>
<packaging>jar</packaging>
<groupId>com.kaven</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot</name>
<description>springboot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
启动类:
package com.kaven.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(SpringbootApplication.class);
application.run(args);
}
}
GET
package com.kaven.springboot.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HTTPMethodController {
@RequestMapping(path = "/get1", method = RequestMethod.GET)
public String get1() {
return "GET1";
}
@GetMapping(path = "/get2")
public String get2() {
return "GET2";
}
}
@RequestMapping(path = "/get1", method = RequestMethod.GET)
和
@GetMapping(path = "/get2")
是一样的效果,都是在控制器中定义一个处理
GET
请求的方法,只是处理请求的路径不同而已。启动应用,使用
Postman
进行测试:
POST
package com.kaven.springboot.controller;
import org.springframework.web.bind.annotation.*;
@RestController
public class HTTPMethodController {
@RequestMapping(path = "/post1", method = RequestMethod.POST)
public String post1() {
return "POST1";
}
@PostMapping(path = "/post2")
public String post2() {
return "POST2";
}
}
DELETE
package com.kaven.springboot.controller;
import org.springframework.web.bind.annotation.*;
@RestController
public class HTTPMethodController {
@RequestMapping(path = "/delete1", method = RequestMethod.DELETE)
public String delete1() {
return "DELETE1";
}
@DeleteMapping(path = "/delete2")
public String delete2() {
return "DELETE2";
}
}
PUT
package com.kaven.springboot.controller;
import org.springframework.web.bind.annotation.*;
@RestController
public class HTTPMethodController {
@RequestMapping(path = "/put1", method = RequestMethod.PUT)
public String put1() {
return "PUT1";
}
@PutMapping(path = "/put2")
public String put2() {
return "PUT2";
}
}
PATCH
package com.kaven.springboot.controller;
import org.springframework.web.bind.annotation.*;
@RestController
public class HTTPMethodController {
@RequestMapping(path = "/patch1", method = RequestMethod.PATCH)
public String patch1() {
return "PATCH1";
}
@PatchMapping(path = "/patch2")
public String patch2() {
return "PATCH2";
}
}
HEAD
HEAD
请求类似于
GET
请求,只不过返回的响应中没有具体的内容,用于获取请求头。
package com.kaven.springboot.controller;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
public class HTTPMethodController {
@RequestMapping(path = "/head1", method = RequestMethod.HEAD)
public String head1(@RequestHeader Map<String, String> header) {
StringBuilder builder = new StringBuilder();
for(Map.Entry entry : header.entrySet()) {
builder.append(entry.getKey() + " : " + entry.getValue() + "\n");
}
builder.append("head1\n");
System.out.println(builder);
return builder.toString();
}
@GetMapping(path = "/head2")
public String head2(@RequestHeader Map<String, String> header) {
StringBuilder builder = new StringBuilder();
for(Map.Entry entry : header.entrySet()) {
builder.append(entry.getKey() + " : " + entry.getValue() + "\n");
}
builder.append("head2\n");
System.out.println(builder);
return builder.toString();
}
}
虽然返回了字符串,但客户端接收到的还是空的响应。
OPTIONS
package com.kaven.springboot.controller;
import org.springframework.web.bind.annotation.*;
@RestController
public class HTTPMethodController {
@RequestMapping(path = "/options1", method = RequestMethod.OPTIONS)
public String options1() {
return "OPTIONS1";
}
}
TRACE
package com.kaven.springboot.controller;
import org.springframework.web.bind.annotation.*;
@RestController
public class HTTPMethodController {
@RequestMapping(path = "/trace1", method = RequestMethod.TRACE)
public String trace1() {
return "TRACE1";
}
}