Spring请求参数和路径变量

客户端传递参数给服务端的两种方式:请求参数路径变量

请求参数

请求参数可以发送值传递给服务器,请求参数采用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}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章