概述
在SpringMVC中,两者都是将request的里的参数的的值绑定到controller里得的方法的参数的,区别在与URL请求的写法不同。
使用@RequestParam时,URL这样写:http://localhost:8080/path?参数名=参数值
使用@PathVariable时,URL这样写:http://localhost:8080/path/参数值
@GetMapping("/on_sale")
public ModelAndView onSale(@RequestParam("productId") String productId){
//TODO
}
请求方式:http://localhost:8080/../on_sale?productId=xxx (xxx代表参数值)
@GetMapping("/on_sale")
public ModelAndView onSale(@PathVariable(value="productId") String productId){
//TODO
}
请求方式:http://localhost:8080/../on_sale/xxx
@RequestParam
@RequestParam注解的主要参数:
value:参数名字,即入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入;
required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;
defaultValue:默认值,表示如果请求中没有同名参数时的默认值,例如:
public ModelAndView findOne(@RequestParam(value="id",defaultValue="0") Long id)
@PathVariable
@PathVariable注解绑定请求传来的的值到方法的参数上,用于将请求URL中的模板变量映射到功能处理的方法参数上,即取出uri模板中的变量作为参数
@PathVariable是用来获的请求url中的动态参数的
@PathVariable绑定URI模板变量的值
通过实验解读@RequestParam和@PathVariable,代码如下:
@RestController
@RequestMapping("/api")
@Slf4j
public class UserController {
@RequestMapping(value = "/user",method = RequestMethod.GET)
public User findUserById(@RequestParam(value = "userId",required = true) Integer userId){
log.info("开始根据id查询用户");
return userService.findById(userId);
}
@RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
public User findById(@PathVariable Integer id){
log.info("开始根据id查询用户");
return userService.findById(id);
}
}
第一个方法的请求方式是:
第二个方法的请求方式:
通过地址可以看出两者的区别了吧!!!!
拓展:
@RequestBody注解的作用
对于注解的作用,网上已经有很多官方的解释了,在我看来:
@RequestBody注解常用来处理HttpEntity传递过来的数据,一般是处理content-type不是默认的application/x-www-form-urlcoded编码格式的数据,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型,在SpringMVC中使用注解@RequestBody可以将传递过来的JSON数据装换为对应的Java对象,可以是Java集合类型或者是字符类型。
~ GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
~ POST请求中,可以使用@RequestBody和@RequestParam,但是使用@RequestBody,对于参数转化的配置必须统一。
最后
以上就是欢喜过客为你收集整理的SpringMVC中@RequestParam和@PathVariable的作用和区别的全部内容,希望文章能够帮你解决SpringMVC中@RequestParam和@PathVariable的作用和区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复