@Param,@RequestBody、@RequestParam 、@PathVariable、 @ResponseBody总结
@Param,@RequestBody、@RequestParam 、@PathVariable、 @ResponseBody总结
前言
在开发中这几个注解经常性的忘记如何使用,几者之间的区别,今天做一下总结,方便之后的复习
以下部分内容有摘自其他文章,如有侵权,请联系作者修改
@Param注解的作用
@Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,当我们的传递的参数不止一个时,我们会通过@Param注解来进行区分(是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中(一般通过#{}的方式,${}会有sql注入的问题)。),如果是一个参数时,不需要添加也可以。
dao层示例:
Public User xxx(@param(“userName”) String user_name ,@param(“password”) String password);
xml映射对应示例:
<select id=" xxx" resultMap="BaseResultMap">
select * from user_user_t where user_name = #{userName} and user_password=#{password}
</select>
注意:采用#{}的方式把@Param注解括号内的参数进行引用(括号内参数对应的是形参如 userName对应的是user_name );
不使用@Param注解
如果不使用注解的话,参数只能有一个,而且该参数必须与javabean中的属性对应
@RequestParam注解的作用
@RequestParam是来传递参数的,用于将请求参数区数据映射到功能处理方法的参数上。
在控制层 Controller 中,有时候写接口会带@RequestParam,有时候也可以不带。
如果带@RequestParam,它一般有三个值,Value,required,defaultValue。
public String XXX(@RequestParam(value = "Id", required = false) String Id,)
@RequestParam主要参数:
- Value:代表你传参的参数名称,例如 @RequestParam(value=“id”) Long userId。在这里,你 传userId是没有用的,你必须传id,因为value指定了你必须传哪个参数名。当然,你也可以省略value 不写,直接写参数名。
- required:默认是true,也就是说,你不显示定义required=false,那么你就必须传参
- defaultValue:表示默认值的意思,如果你不传参,也可以通过,因为defaultValue起到了作用。
@RequestBody注解的作用
(注意:以下@RequestBody部分内容摘自: https://blog.csdn.net/zyx1260168395/article/details/103207614.
- @requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。
- 使用@RequestBody只能发送POST请求
- ajax中的默认发送的参数类型及编码为:application/x-www-form-urlcoded,而使用@RequestBody时参数类型及编码为:aplication/json或者是application/xml,通过contentType属性来指定
- 在传递之前,对JSON对象要使用JSON.stringify(),JSON.stringify() 方法将一个 JavaScript 值(对象或者数组)转换为一个 JSON 字符串
- 一个请求不能同时存在多个@RequestBody
ajax代码
$.ajax({
url: "workbench/activity/deleteActivity.do",
contentType:"application/json;charset=utf-8",//必须指定数据类型为application
type: "post",//请求必须是post
dataType: "json",
data: JSON.stringify([{id:"1",name:"ceshi1"},{id:"2",name:"ceshi2"}]),//必须使用JSON.stringify(),如果是json字符串,要用eval()方法转为json对象
success: function (data) {
if (data.success) {
alert("发送成功");
} else {
alert("发送失败");
}
}
})
后台接收
后台可以根据发回来的数据,使用Map,数组,实体类(要有相应属性的set()方法),集合来接收参数
@RequestMapping("/deleteActivity")
public void deleteActivity(@RequestBody List<Map> ids) {
activityService.deleteActivityById(ids);
return HandleFlag.successTrue();
}
简单理解
1.当客户端的HTTP请求参数contentType设置为:application/json
2.服务端的处理接口参数使用:@RequestBody注解,就会把客户参数当成一个javaBean进行耦合字段赋值,简单的说就是,把客户的json对象转换为javaBean对象
@PathVariable注解的作用
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过
@PathVariable(“xxx”) 绑定到操作方法的入参中。
加注解时
@GetMapping("/toPass/{id}")
public String toPass(@PathVariable("id") Long id) {
return prefix + "/toPass";
}
发起请求时,请求路径后面需要加上参数
没有加注解时
@GetMapping("/toPass")
public String toPass(Long id) {
return prefix + "/toPass";
}
发起请求时,请求路径后面不需要加上参数
@ResponseBody注解的作用
[email protected],一般时存在controller层,该注解的作用是将后台查询的数据转换成json格式传值前台进行展示,包括前台传输数据时也要以json的格式传输给后台。
示例:
@ResponseBody
@GetMapping("/list")
public PageUtils list(@RequestParam Map<String, Object> params){
//查询列表数据
Query query = new Query(params);
List<InsuranceMsgDO> insuranceMsgList = insuranceMsgService.list(query);
int total = insuranceMsgService.count(query);
PageUtils pageUtils = new PageUtils(insuranceMsgList, total);
return pageUtils;
}
如果在Controller没有添加注解,则我们一般是跳转页面
示例:
@GetMapping("/add")
String add(){
return "add";
}
而我们在进行spring框架开发的时候,几乎每一个方法都需要添加@ResponseBody注解,所以之后又形成了@RestController注解,它的作用就是将@Controller和@ResponseBody结合,包括了该两个注解的作用。
示例:
@RestController
@RequestMapping("/test")
public class Test {
public String test(){
return "hello";
}
}
以上见解只是为个人方便日后复习,如有错误,希望各位大佬能评论提醒,感谢!
下一篇: hive的命令行启动方式
推荐阅读
-
@RequestParam、@RequestBody、@ResponseBody、@RestController
-
@PathVariable、@RequestParam和@RequestBody的区别
-
@RequestParam @RequestBody @PathVariable用法小结
-
@RequestParam和@RequestBody和@PathVariable用法小结
-
@PathVariable,@RequestParam,@RequestBody类型使用
-
@RequestParam、@RequestBody和@PathVariable
-
关于 @PathVariable @RequestParam @RequestBody
-
@RequestBody、@RequestParam 、@PathVariable、@RequestPart
-
@RequestParam、@PathVariable()、@RequestBody 的使用
-
Spring MVC代码实例系列-03:@PathVariable、@RequestHeader、@RequestParam、@RequestBody、@ModelAttribute等