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";
}
}
Postman没有提供TRACE方法的请求类型选项,但该方法和上面的方法是类似的,是没问题的,这里就不演示了。Spring Boot处理HTTP请求就介绍到这里,如果博主有说错的地方或者大家有不同的见解,欢迎大家评论补充。










