SpringMVC中@RequestParam和@PathVariable的作用和区别

本文解析了SpringMVC中@RequestParam与@PathVariable的区别及其用法。RequestParam用于获取URL中的参数,而PathVariable则用于获取URL路径中的变量部分。此外,还介绍了这两个注解的主要参数及使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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,对于参数转化的配置必须统一。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值