目录
如果不使用springboot框架
一、原始方式
在Java Web应用中,可以使用HttpServletRequest对象来获取HTTP请求的参数。HttpServletRequest对象包含了请求的所有信息,包括请求行、请求头、请求体和参数。
具体Servlet基础之HttpServletRequest详解-优快云博客
@RequestMapping("/simpleParam")
public String simpleParam(HttpServletRequest request){
String name = request.getParameter("name");
String ageStr= request.getParameter("age");
int age = Integer.parseInt(ageStr);
System.out.println(name + " " + age);
return "OK";
因为Servlet在MVC架构中是充当controller这个角色的,其负责响应用户的请求,也就需要和用户进行交互,负责获取从前端(JSP,客户端)获取数据(用户输入、或者查询条件等),并在处理结束后,给客户端一个响应。如果无法获取页面数据,那么后续的操作也就无从谈起。
当然,为了方便获取页面中的参数,HttpServletRequest也也也提供了一系列的方法,相关方法如下:
在使用springboot框架后
@RequestMapping("/simpleParam")
public String simpleParam(String name, Integer age){
System.out.println(name + " " + age);
return "OK";
}
可以看到大大简化了代码;
下面简单记录一下springboot在处理不同数据的情况
二、SpringBoot方式
1.简单参数
定义方法形参,请求参数名与形参变量名一致。如果不一致,通过 @RequestParam 手动映射。
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name") String username, Integer age){
System.out.println(username + " " + age);
return "OK";
}
2.实体参数
请求参数名,与实体对象的属性名一致,会自动接收封装
public class User {
private String name;
private Integer age;
}
@RequestMapping("/complexParam")
public String complexParam(User user){
System.out.println(user.toString());
return "OK";
}
public class User {
private String name;
private Integer age;
private Address address;
}
public class Address {
private String province;
private String city;
}
@RequestMapping("/complexParam")
public String complexParam(User user){
System.out.println(user.toString());
return "OK";
}
3.数组集合参数
数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
集合参数:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam 绑定参数关系
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby){
System.out.println(Arrays.toString(hobby));
return "OK";
}
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby){
System.out.println(hobby);
return "OK";
}
4.日期参数
日期参数:使用 @DateTimeFormat 注解完成日期参数格式转换
//日期时间参数
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime updateTime){
System.out.println(updateTime);
return "OK";
}
5.JSON参数
JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用 @RequestBody 标
//5.json传参数
@RequestMapping( "/jsonParam")
public String jsonParam(@RequestBody User user){
System.out.println(user.toString());
return "OK";
}
6.路径参数
路径参数:通过请求 URL 直接传递参数,使用 {…} 来标识该路径参数, 需要使用 @ PathVariable 获取路径参数
//6.路径参数
@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id){
System.out.println(id);
return "ok";
}
@RequestMapping("/path/{id}/{name}")
public String pathParam(@PathVariable Integer id,@PathVariable String name){
System.out.println(id + name);
return "ok";
}
三、SpringBoot请求参数注解
在 Spring Boot 中,处理 HTTP 请求的注解主要包括以下几种:
1. @RequestMapping
用于将 HTTP 请求映射到处理器方法。可以应用于类或方法上。
常用属性:
value:指定请求的 URL。
method:指定请求的 HTTP 方法(如 GET、POST 等)。
produces:指定返回的媒体类型(如 application/json)。
consumes:指定处理的媒体类型(如 application/json)。
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<User> getAllUsers() { // 处理逻辑 }
2. @GetMapping
是 @RequestMapping 的快捷方式,用于处理 HTTP GET 请求。
示例:
@GetMapping("/users") public List<User> getAllUsers() { // 处理逻辑 }
3. @PostMapping
是 @RequestMapping 的快捷方式,用于处理 HTTP POST 请求。
示例:
@PostMapping("/users") public User createUser(@RequestBody User user) { // 处理逻辑 }
4. @PutMapping
是 @RequestMapping 的快捷方式,用于处理 HTTP PUT 请求。
示例:
@PutMapping("/users/{id}") public User updateUser(@PathVariable Long id, @RequestBody User user) { // 处理逻辑 }
5. @DeleteMapping
是 @RequestMapping 的快捷方式,用于处理 HTTP DELETE 请求。
示例:
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
// 处理逻辑
}
6. @PatchMapping
是 @RequestMapping 的快捷方式,用于处理 HTTP PATCH 请求。
示例:
@PatchMapping("/users/{id}")
public User partiallyUpdateUser(@PathVariable Long id, @RequestBody Map<String, Object> updates) {
// 处理逻辑
}
7. @RequestParam
用于获取 URL 中的查询参数。
示例:
@GetMapping("/users")
public List<User> getUsers(@RequestParam(name = "page", defaultValue = "1") int page)
{
// 处理逻辑
}
8. @PathVariable
用于获取 URL 路径中的变量。
示例:
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
// 处理逻辑
}
9. @RequestBody
用于将请求体中的 JSON 自动转换为 Java 对象。
示例:
@PostMapping("/users")
public User createUser(@RequestBody User user) { // 处理逻辑 }
@PathVariable 用于从 URL 路径中获取数据,而 @RequestBody 用于从 HTTP 请求体中获取数据。
@PathVariable 常用于 RESTful 风格的 URL 中获取资源标识符,如 ID、名称等。
@RequestBody 常用于处理 POST、PUT 等请求方法,接收请求体中的数据。
10. @RequestHeader
用于获取请求头中的信息。
示例:
@GetMapping("/users")
public List<User> getUsers(@RequestHeader("Authorization") String token) { // 处理逻辑 }
四、响应
1.@Controller
在采用@Contoller注解的方式,可以使接口的定义更加简单,将@Controller标记在某个类上,配合@RequestMapping注解,可以在一个类中定义多个接口,这样使用起来更加灵活。
被@Controller标记的类实际上就是个SpringMVC Controller对象,它是一个控制器类,而@Contoller注解在org.springframework.stereotype包下。其中被@RequestMapping标记的方法会被分发处理器扫描识别,将不同的请求分发到对应的接口上。
2.@ResponseBody
@ResponseBody 将方法的返回值,以特定的格式写入到response的body区域 [HTTP response body],进而将数据返回给客户端。
当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。当它标注类时,类中所有方法的返回值都将直接返回值到页面,相当于给所有的类都加上@ResponseBody注解。
如果返回值是字符串,那么直接将字符串写到客户端;如果是一个对象,会将对象转化为json串,然后写到客户端。
使用位置:一般在异步获取数据时使用[也就是AJAX],在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入HTTP response body 中。
举例:比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。
3.@RestController
@RestController = @Controller + @ResponseBody
@RestController注解相当于@ResponseBody + @Controller合在一起的作用,只能注解类。
使用@RestController这个注解,直接写入HTTP相应体返回到页面中。
此时 return “xx”,只会返回"xx"的内容。因为@RestController中相当于已经有了@RessponseBody的注解效果,它会以json字符串的形式返回给客户端。
SpringBoot请求注解详解_springboot请求参数注解-优快云博客
Servlet基础之HttpServletRequest详解-优快云博客