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