@PathVariable、@Param、@RequestParam、@RequestBody间的区别
@RequestBody常常将前端传来的post请求(Json格式的数据)进行解析,例如批量插入数据时,需要@RequestBody
@ResponseBody就是为了将Java对象以Json格式的形式传给前端(举个生活中的例子,用邮箱发邮件,根据SMTP协议,以数据流【随便说的,反正是某种特定形式啦】的形式发给对方,其实这个中间的形式跟Java前后端相连是不是很像)
代码示例:
public Result> add(@RequestBody ExportCargoOrderCommon exportCargoOrderCommon) { exportCargoOrderCommon.setOrderNo(Tools.setOrderNo()); exportCargoOrderCommon.setIsDelete(0); exportCargoOrderCommonService.save(exportCargoOrderCommon); return Result.OK("添加成功!"); }
特点:
@Param主要应用在Dao层
注解中的sql语句有多个条件参数,且和方法中的参数名称不一致,此时可以使用@Param注解
只有一个参数时,可以不使用注解(不过还是建议使用= =)
参数的顺序无关
代码示例:
@Select("select * from user where uid = #{uid} and uname = #{uname}") ListgetUserList(@Param("uid") Integer id, @Param("uname") String name);
@RequestParam主要应用在Controller层
前端提交的form表单数据中的属性名和方法中的参数名不一致时 ,springMVC就无法自动封装参数,所以需要 @RequestParam(“前端所传属性名” 来指定前端提交的表单的属性的名称
前端提交的form表单数据中的属性名和方法中的参数名一致时,可以不使用此注解
代码示例:
@ResponseBody @RequestMapping(value = "/user/get", method = RequestMethod.POST) public ListgetUserList(@RequestParam("uid") Integer id, @RequestParam("uname") String name) { }
@PathVariable
spring3.0的一个新功能:应用在Controller层,可接收请求路径中占位符的值,通过 @PathVariable 可以 – – 将URL中占位符参数{uid}绑定到处理器类的方法形参uid中 —— @PathVariable(“uid“)
请求路径中占位符的名字可与方法参数名不一样:public User getUserById(@PathVariable(“uid”) Long id)
代码示例:
@ResponseBody @RequestMapping("/user/{uid}") public User getUserById(@PathVariable("uid") Long uid) { } // 请求路径:http://localhost:8080/user/12001