0
点赞
收藏
分享

微信扫一扫

Spring Boot:处理HTTP请求


​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 Boot:处理HTTP请求_spring

  • ​Spring Web​​​提供了核心的​​HTTP​​集成,包括一些方便的​​Servlet​​过滤器、​​Spring HTTP​​调用程序、与其他​​Web​​框架和​​HTTP​​技术(如​​Hessian​​、​​Burlap​​)集成的基础结构。
  • Spring Boot:处理HTTP请求_mvc_02

  • ​Spring Web MVC​​​是​​Spring MVC​​的一个实现,​​Spring Web MVC​​依赖于​​Spring Web​​。如果不使用​​Spring MVC​​,但需要使用​​Spring​​支持的其他与​​Web​​相关的技术,那么应该依赖​​Spring Web​​。
  • Spring Boot:处理HTTP请求_spring boot_03


  • Spring Boot:处理HTTP请求_http_04

​spring-web​​​模块提供了大多数处理​​HTTP​​请求的注解。

Spring Boot:处理HTTP请求_java_05


​spring-context​​​模块提供了​​Controller​​注解。

Spring Boot:处理HTTP请求_mvc_06


​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​​进行测试:

Spring Boot:处理HTTP请求_java_07

Spring Boot:处理HTTP请求_spring boot_08

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";
}
}

Spring Boot:处理HTTP请求_java_09


Spring Boot:处理HTTP请求_java_10

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";
}
}

Spring Boot:处理HTTP请求_mvc_11


Spring Boot:处理HTTP请求_spring_12

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";
}
}

Spring Boot:处理HTTP请求_java_13


Spring Boot:处理HTTP请求_mvc_14

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";
}
}

Spring Boot:处理HTTP请求_spring_15


Spring Boot:处理HTTP请求_http_16

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();
}
}

虽然返回了字符串,但客户端接收到的还是空的响应。

Spring Boot:处理HTTP请求_spring boot_17


Spring Boot:处理HTTP请求_http_18


Spring Boot:处理HTTP请求_mvc_19

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";
}
}

Spring Boot:处理HTTP请求_mvc_20

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​​请求就介绍到这里,如果博主有说错的地方或者大家有不同的见解,欢迎大家评论补充。


举报

相关推荐

0 条评论