@RequestBody,@RequestParam和@Param的区别说明

目录
  • @RequestBody,@RequestParam和@Param区别
    • @Param
    • @RequestBody
    • @RequestParam
  • @RequestParam使用注意事项
    • 比如下面的接口
    • 为了拦截到参数为空的请求

@RequestBody,@RequestParam和@Param区别

@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

@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。

通过@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中的属性名,否则是请求不过去的。

处理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可以获取的到。

@RequestParam使用注意事项

  • @RequestParam:将请求参数绑定到你控制器的方法参数上

该注解中有一个属性required,表示是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。

但是大家使用的时候不要产生误区,required=true是能校验请求中是否包含该参数,但是不能校验参数值是否为空.

比如下面的接口

http://127.0.0.1:9802/api/order/vr/testRequestParam这样是可以被拦截下来的,因为请求参数中不存在param1这个参数

但是http://127.0.0.1:9802/api/order/vr/testRequestParam?param1是可以请求成功的

为了拦截到参数为空的请求

还需要在参数中加 @Valid @NotBlank

如下:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 简单捋捋@RequestParam 和 @RequestBody的使用

    前端向后端传递参数,后端怎么去接收,就会想到 spring 的注解 之前的话,我一直用的是 RequestParam("userName") String userName 这种形式,讲道理不怎么用 RequestParam String userName 无意间该去看看这两个是有什么不同了. @RequestParam @RequestBody (以 json 数据的形式接收) 如果不写 @RequestParam(xxx) 注解的话,那么就前端可以有 可以没有对应的xxx名字都行

  • 浅谈@RequestBody和@RequestParam可以同时使用

    目录 @RequestBody和@RequestParam可以同时使用吗 自己个人实际验证结果 在postman发送如下post请求,返回正常 body中参数如下 值得注意的地方 @RequestBody和@RequestParam注解使用说明 @RequestBody作用 @RequestParam作用 @RequestBody和@RequestParam可以同时使用吗 @RequestParam和@RequestBody这两个注解是可以同时使用的. 网上有很多博客说@RequestParam

  • 聊聊@RequestParam,@PathParam,@PathVariable等注解的区别

    @RequestParam 和 @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @PathVariable 是从一个URI模板里面来填充 @RequestParam 看下面一段代码: http://localhost:8080/springmvc/hello/101?param1=10&param2=20 根据上面的这个URL,你可以用这样的方式来进行获取 public Strin

  • python requests包的request()函数中的参数-params和data的区别介绍

    如下所示: import requests url='http://www.baidu.com' #下面使用requests.request(method, url, **kwargs) re=requests.request('GET',url) 经验证,可用. 我们试着传入一个字典,首先用params参数. 结果为: 亮点在url和args. 我们还用get方法,把dic这个字典传给data试试看. 亮点还是在args和url.惊喜地发现,dic这个字典没传进去. 这是因为: params是

  • @RequestBody,@RequestParam和@Param的区别说明

    目录 @RequestBody,@RequestParam和@Param区别 @Param @RequestBody @RequestParam @RequestParam使用注意事项 比如下面的接口 为了拦截到参数为空的请求 @RequestBody,@RequestParam和@Param区别 @Param @Param是mybatis中的注解,用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 .请看下面的示例:

  • Mybatis中${param}与#{param}的区别说明

    目录 ${param}与#{param}的区别 Mybatis中#{}与${}使用总结 #{ }与${ }的区别 使用总结 ${param}与#{param}的区别 ${param}表达式主要用户获取配置文件数据,DAO接口中的参数信息,当 $ 出现在映射文件的 SQl 语句中时创建的不是预编译的 SQL ,而是字符串的拼接有可能会导致 SQL 注入的问题,所以一般使用 $ 接收 DAO 参数时,这些参数一般是字段名,表名等.例如 order by {column} #{param} 表达式主要

  • 基于params、@PathVariabl和@RequestParam的用法与区别说明

    方法参数相关属性params.@PathVariabl和@RequestParam的使用 [1]params params:指定request中必须包含某些参数值是,才让该方法处理. @RequestMapping(value = "testParamsAndHeaders", params = { "username","age!=10" }) public String testParamsAndHeaders() { System.out.

  • asp.net中Request.QueryString与Request.Param的区别分析

    request.params其实是一个集合,它依次包括request.querystring.request.form.request.cookies和request.servervariables. 如果要在两个页面传递数据的话,只能用request.querystring.request.form.request.cookies Request.Params 是在 QueryString.Form.Server Variable 以及 Cookies 找数据, 他首先在 QueryStrin

  • IE6与IE7中,innerHTML获取param的区别

    代码: 复制代码 代码如下: <html> <head> <script type="text/javascript"><!-- function setMode(newMode) { var text1=document.getElementById("text1"); var cont; bTextMode = newMode; if (bTextMode) { cont=text1.innerHTML; text1.i

  • Java中POST、GET、@RequestBody和@RequestParam区别详析

    目录 @RequestParam @RequestBody 后端解析json数据 POST请求时 总结 参考: @RequestParam 注解@RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中. RequestParam可以接受简单类型的属性,也可以接受对象类型. @RequestParam有三个配置参数: required 表示是否必须,默认为 true,必须. defaultValue 可设置请求参数的默认值. value 为接收url的参数名(

  • mysql中 ${param}与#{param}使用区别

    ${param}传递的参数会被当成sql语句中的一部分,比如传递表名,字段名 例子:(传入值为id) order by ${param} 则解析成的sql为: order by id #{parm}传入的数据都当成一个字符串,会对自动传入的数据加一个双引号 例子:(传入值为id) select * from table where name = #{param} 则解析成的sql为: select * from table where name = "id" 为了安全,能用#的地方就用

  • 关于@RequestParam注解的使用(简单易懂)

    目录 @RequestParam注解使用 1.作用 2.语法 3.测试环境 4.工程结构 5.业务处理器HelloController.java 6.测试 @RequestParam与@Param区别 @RequestParam注解使用 1.作用 @RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解) 2.语法 语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””

  • Mybatis中@Param的用法和作用详解

    用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 我们先来看Mapper接口中的@Select方法 package Mapper; public interface Mapper { @Select("select s_id id,s_name name,class_id classid from student where s_name= #{aaaa} and class_id = #{bbbb}")

  • springmvc常用注解标签详解

     1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@Request

随机推荐