介绍
在Spring Boot项目中,你可以使用Spring框架提供的各种工具和注解来处理HTTP请求。Spring Boot提供了简单且强大的方式来处理HTTP请求,并且可以轻松地与其他Spring组件集成。
下面是一些在Spring Boot项目中处理HTTP请求的常见方法和概念:
注解:Spring Boot使用注解来标记和处理HTTP请求。常用的注解包括:
@RequestMapping
:将HTTP请求映射到相应的处理方法。@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
等:用于定义具体的HTTP请求方法(GET、POST、PUT、DELETE)的映射。@PathVariable
:用于将URL中的路径参数绑定到方法参数。@RequestParam
:用于将HTTP请求中的查询参数绑定到方法参数。@RequestBody
:用于将HTTP请求中的请求体内容绑定到方法参数。
控制器(Controller):在Spring Boot中,你可以创建控制器类来处理HTTP请求。控制器类使用上述注解来定义和处理具体的请求。你可以在控制器类中定义多个处理方法,每个方法处理不同的URL请求。
例如,下面是一个使用
@GetMapping
注解的控制器方法的示例:@RestController public class UserController { @GetMapping("/users/{id}") public User getUser(@PathVariable("id") Long id) { // 处理获取用户信息的逻辑 } } // 在上面的示例中,`@GetMapping`注解将HTTP GET请求映射到`getUser`方法,并且将URL中的`id`路径参数绑定到`id`方法参数上。
请求和响应对象:Spring Boot会自动将HTTP请求映射为Java对象,并将处理方法的返回值转换为HTTP响应。你可以使用
@RequestBody
注解将HTTP请求的内容绑定到Java对象上,并使用方法的返回值来生成HTTP响应。例如,下面是一个处理POST请求的示例:
@RestController public class UserController { @PostMapping("/users") public User createUser(@RequestBody User user) { // 处理创建用户的逻辑 } } // 在上述示例中,`@PostMapping`注解将HTTP POST请求映射到`createUser`方法,并使用`@RequestBody`将请求体的内容绑定到`user`参数上。方法的返回值将作为HTTP响应的内容。
响应状态和头:你可以使用方法的返回值来设置HTTP响应的状态码和头信息。例如,可以使用
ResponseEntity
对象来自定义HTTP响应。@RestController public class UserController { @GetMapping("/users/{id}") public ResponseEntity<User> getUser(@PathVariable("id") Long id) { User user = userService.getUserById(id); if (user != null) { return ResponseEntity.ok(user); } else { return ResponseEntity.notFound().build(); } } } // 在上述示例中,如果找到了用户,则返回状态码200和用户对象作为响应;如果未找到用户,则返回状态码404。
示例
项目结构
HttpApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class A03SpringBootHttpApplication {
public static void main(String[] args) {
SpringApplication.run(A03SpringBootHttpApplication.class, args);
}
}
HttpRequest.java
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@RestController
public class HttpRequest {
private Map<String,Object> params = new HashMap<>();
/**
* 功能描述:测试restful协议,从路径中获取字段
* localhost:8081/request-mapping/value1/value2
*/
@RequestMapping(path = "/request-mapping/{param1}/{param2}", method = RequestMethod.GET)
public Object findUser(@PathVariable("param1") String param1,
@PathVariable("param2") String param2 ){
params.clear();
params.put("param1", param1);
params.put("param2", param2);
return params;
}
/**
* 功能描述:测试GetMapping
* 路径含有参数: localhost:8081/get-mapping/param-in-path?param1=1¶m2=2
*/
@GetMapping(value="/get-mapping/param-in-path")
public Object pageUser(int param1, int param2){
params.clear();
params.put("param1", param1);
params.put("param2", param2);
return params;
}
/**
* 功能描述:默认值,是否必须的参数
* 路径含有参数: localhost:8081/get-mapping/default-value
*/
@GetMapping(value="/get-mapping/default-value")
public Object pageUserV2(@RequestParam(defaultValue="0",name="alias1") int param1, int param2 ){
params.clear();
params.put("param1", param1);
params.put("param2", param2);
return params;
}
/**
* 功能描述:bean对象传参
* 注意:1、注意需要指定http头为 content-type为application/json
* 2、使用body传输数据
* 请求的url: localhost:8081/request-mapping/bean-transfer
* body内容:
* {
* "id": "1",
* "name": "supremepole",
* "url": "https://cs.supremepole.com"
* }
*/
@RequestMapping("/request-mapping/bean-transfer")
public Object saveUser(@RequestBody Website website){
params.clear();
params.put("website", website);
return params;
}
/**
* 功能描述:测试获取http头信息
* localhost:8081/get-mapping/http-header?id=123456
* http头含有参数:access-token: my-token
*/
@GetMapping("/get-mapping/http-header")
public Object getHeader(@RequestHeader("access-token") String accessToken, String id){
params.clear();
params.put("access_token", accessToken);
params.put("id", id);
return params;
}
/**
* HttpServletRequest request自动注入获取参数
* localhost:8081/get-mapping/http-servlet-request?id=myid
*/
@GetMapping("/get-mapping/http-servlet-request")
public Object testRequest(HttpServletRequest request){
params.clear();
String id = request.getParameter("id");
params.put("id", id);
return params;
}
/**
* 功能描述:测试PostMapping
* localhost:8081/post-mapping/post
*/
@PostMapping("/post-mapping/post")
public Object login(String id, String name, String url){
params.clear();
params.put("id", id);
params.put("name", name);
params.put("url", url);
return params;
}
/**
* 功能描述:测试PutMapping
* localhost:8081/put-mapping/put
*/
@PutMapping("/put-mapping/put")
public Object put(String id){
params.clear();
params.put("id", id);
return params;
}
/**
* 功能描述:测试DeleteMapping
* localhost:8081/delete-mapping/del
*/
@DeleteMapping("/delete-mapping/del")
public Object del(String id){
params.clear();
params.put("id", id);
return params;
}
}
Website.java
public class Website {
private int id;
private String url;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
application.properties
server.port=8081