在使用spring的项目中,前台传递参数到后台是经常遇到的事, 我们必须熟练掌握一些常用的参数传递方式和注解的使用,废话少说,直接上正文。
1. @requestMapping:
类级别和方法级别的注解, 指明前后台解析的路径。 有value属性(一个参数时默认)指定url路径解析,method属性指定提交方式(默认为get提交)
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/find",method = {RequestMethod.GET})
@ResponseBody
public User findUser() {
User user = userService.findUser();
return user;
}
}
在这个例子中,如果前台要访问findUser方法,那么,前台的url应为:http://localhost:8080/user/find
2.直接传参:
第一种最简单的绑定就是直接前台传参,后台的方法里面的形参和前台参数方法名一致,则可以接受到前台的参数。
@RequestMapping(value = "/save",method = {RequestMethod.GET})
@ResponseBody
public int save(String name , String sex) {
User user = new User();
user.setAddress("湖南");
user.setBirthday(new Date());
user.setSex(sex);
user.setUsername(name);
return userService.saveUser(user);
}
url:http://localhost:8080/user/save/?name=张三&sex=女
3. @RequestParam:
请求参数规则注解。 value属性匹配前台传递的参数的名字(一个参数时默认),required属性此字段是否必须传值(boolean,默认为true),defaultValue此参数的默认值(存在此参数时,说明前台不必需传递参数,required为false)
@RequestMapping(value = "/save",method = {RequestMethod.GET})
@ResponseBody
public int save(@RequestParam(value = "name",required = true) String name1 , @RequestParam(value = "sex",required = true) String sex1) {
User user = new User();
user.setAddress("湖南");
user.setBirthday(new Date());
user.setSex(sex1);
user.setUsername(name1);
return userService.saveUser(user);
}
前台url:http://localhost:8080/user/save/?name=张三&sex=女
4. @PathVariable:
url参数注解, 一般用于从url中获取参数,具体看下图:
@RequestMapping(value = "/save/{name}/{sex}",method = {RequestMethod.GET})
@ResponseBody
public int save(@PathVariable("name") String name ,@PathVariable("sex") String sex) {
User user = new User();
user.setAddress("湖南");
user.setBirthday(new Date());
user.setSex(sex);
user.setUsername(name);
return userService.saveUser(user);
}
url:http://localhost:8080/user/save/张三/男
5. 特殊的属性编辑器
在前台到后台data日期类型等的转化会出错,此时我们需要属性编辑器进行属性的转化 //日期传递参数会产生异常,因此在传递时间参数时,需要进行类型转换,在初始化时进行数据的绑定与转化
@RequestMapping(value="/todate/{data}",method=RequestMethod.GET)
public String todate(@PathVariable("data") Date date){
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
return "start";
}
@InitBinder //初始化参数绑定, 日期类型的转化,
public void initBinder(ServletRequestDataBinder binder){
binder.registerCustomEditor(java.util.Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
}
总结:
注意两个区别
- @PathVariable是获取url上数据的(根据{}里面的内容来匹配,见上面第四点)。@RequestParam获取请求参数的(包括post表单提交,根据参数名来匹配)
- 如果加上@ResponseBody注解,就不会走视图解析器,不会返回页面,目前返回的json数据。如果不加,就走视图解析器,返回页面
版权声明:本文为yuan_qh原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。