@RequestBody,@RequestParam和@Param的区别

7 篇文章 0 订阅

@Param

@Param是mybatis中的注解,用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 。请看下面的示例:

public interface Mapper { 
   
@Select("select s_id id,s_name name,class_id classid from student where  s_name= #{aaaa} and class_id = #{bbbb}") 
    public Student select(@Param("aaaa") String name,@Param("bbbb")int class_id);  
   
@Delete...... 
       
@Insert...... 
    
} 

@RequestBody

  1. @requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。
  2. 通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。
        例如说以下情况:
        
           $.ajax({
            url:"/login",
            type:"POST",
            data:'{"userName":"admin","pwd","admin123"}',
            content-type:"application/json charset=utf-8",
            success:function(data){
              alert("request success ! ");
            }
        });
    
    
    
        @requestMapping("/login")
        public void login(@requestBody String userName,@requestBody String pwd){
          System.out.println(userName+" :"+pwd);
        }

        这种情况是将JSON字符串中的两个变量的值分别赋予了两个字符串,但是呢假如我有一个User类,拥有如下字段:
          String userName;
          String pwd;
        那么上述参数可以改为以下形式:@requestBody User user 这种形式会将JSON字符串中的值赋予user中对应的属性上
        需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的。 
  3. 处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据。
  •       GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
  •       POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用              HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。

@RequestParam

用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)

RequestParam可以接受简单类型的属性,也可以接受对象类型。 
 实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。

在Content-Type: application/x-www-form-urlencoded的请求中, 
get 方式中queryString的值,和post方式中 body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到。

当使用Spring MVC框架时,@RequestBody注解通常用于接收请求体中的JSON或XML等数据格式,并将其转换为Java对象。而@RequestParam注解则用于接收URL中的查询参数。这两个注解可以一起使用,以支持同时接收请求体和查询参数的情况。 例如,假设我们有一个POST请求,请求体中包含JSON格式的数据,同时还有一些查询参数。我们可以使用下面的代码来处理该请求: ```java @PostMapping("/example") public ResponseEntity<?> handleExampleRequest(@RequestBody ExampleRequest requestBody, @RequestParam("param1") String param1, @RequestParam("param2") String param2) { // 处理请求 return ResponseEntity.ok().build(); } ``` 这里我们定义了一个POST请求的处理方法,方法名为handleExampleRequest。该方法使用了@PostMapping注解,表示它处理POST请求。方法的路径为/example。 方法的参数中有三个注解:@RequestBody、@RequestParam("param1")和@RequestParam("param2")。其中@RequestBody注解表示我们要接收请求体中的JSON数据,并将其转换为一个ExampleRequest对象;@RequestParam注解表示我们要接收URL中的查询参数,分别对应param1和param2这两个参数名。 在处理方法中,我们可以使用requestBodyparam1和param2三个参数来访问请求体中的JSON数据和查询参数,以便进一步处理请求。最后,我们可以返回一个ResponseEntity对象,表示请求已经成功处理完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值