1.实现方式
假设前端发送的接口: /users?name=John&age=30
后端怎么接收里面的name和age呢?以及再发别的参数后端怎么接收呢?
1.比较简单的方式
当控制器方法的参数类型是简单类型(如
String
、Integer
、Long
等),并且请求中的参数名和方法参数名一致时,即便不使用@RequestParam
注解,Spring 也会自动将请求参数绑定到方法参数上。
@GetMapping("/users")public String getUsers(String name, Integer age) {UserQuery userQuery = new UserQuery(name, age);return "Name: " + userQuery.getName() + ", Age: " + userQuery.getAge();}
}
2.带着注解的
带着RequestParam注解的
@GetMapping("/users")
public String getUsers(@RequestParam(required = false) String name, @RequestParam(required = false) Integer age) {UserQuery userQuery = new UserQuery(name, age);return "Name: " + userQuery.getName() + ", Age: " + userQuery.getAge();
}
3.直接从request中获取
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;@RestController
public class UserController {@GetMapping("/users")public String getUsers(HttpServletRequest request) {UserQuery userQuery = (UserQuery) request.getAttribute("userQuery");return "Name: " + userQuery.getName() + ", Age: " + userQuery.getAge();}
}
4.采用@SpringQueryMap 注解
当查询的参数过多的时候使用SpringQueryMap注解可以让控制器方法的参数列表更简洁,当参数列表很长的时候影响代码的可读性和维护性。
@RestController
public class UserController {@GetMapping("/users")public String getUsers(@SpringQueryMap UserQuery userQuery) {return "Name: " + userQuery.getName() + ", Age: " + userQuery.getAge();}
}