@RequestBody 和@RequestParam的区别

  1. @RequestBody 和 @RequestParam是可以一起用的
  2. @RequestBody —> JSON字符串部分
    1. 接收的参数来自于requestBody中,即请求体,一般用于处理非Content-Type:application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据。
    2. 就application/json类型的数据而言,使用注解@RequestBody可以将body里面所有的json数据传到后端,后端再进行解析。
    3. GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
    4. POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的baen上。
    5. 参数类型可以是:application/josn。
    6. 在前端使用$.ajax时,一定要指定contentType:”application/json;charset=utf-8;”
  3. @RequestParam —> 请求参数部分

    1. 接收的参数式来自HTTP请求体或者请求url的QueryString中。可以接受简单类型的属性,也可以接受对象类型。
    2. 内含三个配置参数:
      1. required:表示必须,默认为true,必须
      2. defaultValue:可设置请求参数默认值。
      3. value:为接收url的参数名
    3. 用来处理Content-Type为application/x-www-form-urlencoded编码的内容,Content-Type默认为该属性
    4. 用于其他类型的请求,例如:POST、DELETE等请求
    5. 不支持批量插入数据,如果改用json字符串来传值的话,类型设置为application/json,点击发送的话,会报错,后台接收不到值,为null。
    6. 参数类型可以是:form-data、x-www-form-urlencoded或者url中的?后面的参数。

      @ResponseBody注解的作用

  4. 作用:

a. @ResponseBody的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML。
数据,需要注意的是,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

  1. 原理:

    1. 控制层方法的返回值是如何转化为json格式的字符串的?其实是通过HttpMessageConverter中的方法实现的。它本是一个接口,在其实现类完成转换。如果是bean对象,会调用对象的getXXX()方法获取属性值并且以键值对的形式进行封装,进而转化为json串,如果是map集合,采用get(key)方式获取value值,然后进行封装。

      @Param注解的使用

  2. 作用:

    1. 用注解来简化xml配置的是偶(比如Mybatis的Mapper.xml中的sql参数引入),@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql中(一般通过#{}的方式,${}会有sql注入的问题)
    2. 当使用@Param注解来声明参数时,如果使用#{}或${}方式都可以。
      1. 当参数类型是Intager时候,用#{}或${}方式都可以。
      2. 当参数类型是String时候,必须使用#{},如果使用${}或报错:java.sql.SQLSyntaxErrorException: Unknown column ‘SW’ in ‘where clause’,如果想用${},必须在${}外面加上单引号(’’)
    3. 当不使用@Param注解时,最好传递Javabean,在sql语句里面就可以直接引用JavaBean的属性,而且只能引用JavaBean存在的属性。