@RequestBody 和@RequestParam的区别
- @RequestBody 和 @RequestParam是可以一起用的
- @RequestBody —> JSON字符串部分
- 接收的参数来自于requestBody中,即请求体,一般用于处理非Content-Type:application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据。
- 就application/json类型的数据而言,使用注解@RequestBody可以将body里面所有的json数据传到后端,后端再进行解析。
- GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
- POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的baen上。
- 参数类型可以是:application/josn。
- 在前端使用$.ajax时,一定要指定contentType:”application/json;charset=utf-8;”
@RequestParam —> 请求参数部分
- 接收的参数式来自HTTP请求体或者请求url的QueryString中。可以接受简单类型的属性,也可以接受对象类型。
- 内含三个配置参数:
- required:表示必须,默认为true,必须
- defaultValue:可设置请求参数默认值。
- value:为接收url的参数名
- 用来处理Content-Type为application/x-www-form-urlencoded编码的内容,Content-Type默认为该属性
- 用于其他类型的请求,例如:POST、DELETE等请求
- 不支持批量插入数据,如果改用json字符串来传值的话,类型设置为application/json,点击发送的话,会报错,后台接收不到值,为null。
- 参数类型可以是:form-data、x-www-form-urlencoded或者url中的?后面的参数。
@ResponseBody注解的作用
作用:
a. @ResponseBody的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML。
数据,需要注意的是,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
原理:
作用:
- 用注解来简化xml配置的是偶(比如Mybatis的Mapper.xml中的sql参数引入),@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql中(一般通过#{}的方式,${}会有sql注入的问题)
- 当使用@Param注解来声明参数时,如果使用#{}或${}方式都可以。
- 当参数类型是Intager时候,用#{}或${}方式都可以。
- 当参数类型是String时候,必须使用#{},如果使用${}或报错:java.sql.SQLSyntaxErrorException: Unknown column ‘SW’ in ‘where clause’,如果想用${},必须在${}外面加上单引号(’’)
- 当不使用@Param注解时,最好传递Javabean,在sql语句里面就可以直接引用JavaBean的属性,而且只能引用JavaBean存在的属性。
