客户端传递参数给服务端的两种方式:请求参数 和 路径变量
请求参数
请求参数可以发送值传递给服务器,请求参数采用key=value的形式并使用“&”符号进行参数间的分隔,例如:
http://localhost:8080/xxx/user?name=Tom&password=123456
传递过来的值Spring MVC需要解析,采用@RequestParam的形式来注释方法中的参数,获取上面两个参数的方法为:
@GetMapping("/name")
public User getUserByName(@RequestParam("id") Integer userId, @RequestParam("name") String username){
}
或者
@GetMapping("/xxx/user")
public User getUser(HttpServletRequest request){
Integer userId = Integer.decode(request.getParameter("id"));
String username = request.getParameter("name");
}
路径变量
路径变量类似请求参数,但是没有key部分。由名称可知路径中存在变量,例如要传递一个age为23的参数到服务端,其请求的URL为:
http://localhost:8080/xxx/user/Tom/25;
服务端接受和处理的方法为:
@GetMapping("/name/{name}/{id}")
public User getUserByName(@PathVariable("name")String username, @PathVariable("id")Integer userId){
}
参数写在路径上好,还是写在请求参数上好
在RESTful风格中,/user/{name} 和 /user/{id} 两个路径,它们的http-method是一样的,接收的都是String字符串。那么当客户端发送请求传递过来一个参数时,是给/user/{name}呢?还是给/user/{id}呢?
所以,在RESTful风格中,当两个路径的http-method一样时,那么路径就不要一样。比如可以将上面的/user/{name}改成/user/name/{name}