开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详
大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN java领域新星创作者blog.csdn.net/bug..
- 掘金LV3用户 juejin.cn/user/bug..
- 阿里云社区专家博主,星级博主,developer.aliyun.com/bug..
- 华为云云享专家 bbs.huaweicloud.com/bug..
获取参数
获取参数,就是获取到客户端给我们服务器传来的参数!
传递单个参数
@Controller
@RequestMapping(value = "/parame",method = RequestMethod.POST)//接收post请求
@ResponseBody //可以返回非静态页面!
public class GetParameter {
@RequestMapping("/get")
public void getSingerParamer(String name){
System.out.println("客户端发来的name: "+name);
}
}
启动项目后在浏览器发送一个post请求给服务器即可
可以看到SpringMVC接收请求直接通过参数就拿到了客户端的请求信息,不用使用之前Servlet通过Request请求中的信息读取!
注意
前后端的属性参数名要一致
当前后端参数名称不一致时:
不一致,服务器端将获取不到客户端传来的数据
传递对象
对象实体类
@Data //生成get/setter等方法
public class User {
private String id;
private String name;
private String password;
}
获取到一个对象参数
@Controller
@ResponseBody
@RequestMapping("/user")
public class GetUser {
@RequestMapping("/get")
public void getUser(User user){
System.out.println(user.toString());
}
}
前端命名要和对象中的属性名相同
表单参数传递/传递多个参数(非对象)
@Controller
@RequestMapping(value = "/parame",method = RequestMethod.POST)//接收post请求
@ResponseBody //可以返回非静态页面!
public class GetParameter {
@RequestMapping("/get")
public void getSingerParamer(String name,Integer password){
System.out.println("客户端发来的name: "+name);
System.out.println("客户端发来的password: "+password);
}
}
可以看到这里参数的前后顺序并不会影响参数的传递,服务器会根据客户端的发来的名称进行匹配
后端参数重命名(后端参数映射)
我们发现只要客户端发送的数据属性名和参数名不匹配,服务器端就无法接收到客户端传来的数据!
我们如何解决这样的问题呢?
- 让客户端和我们后端的参数名匹配!
- 在我们服务器后端进行参数映射
显然第一种方法不是很科学,咱也不能这样子命令前端,都是打工人!
我们可以通过后端参数映射解决这个问题! 直接改参数名嘛? 显然可取,但是当我们已经用该参数写了好多代码时,这不就裂开了! 我们可以在方法头参数前加一个注解即可!
通过 @RequestParam 注解进行参数映射!
这样我们既不用改动前端的代码,也不用改变我们的参数名称就可以实现后端参数重命名!
@Controller
@RequestMapping(value = "/parame",method = RequestMethod.POST)//接收post请求
@ResponseBody //可以返回非静态页面!
public class GetParameter {
@RequestMapping("/get")
public void getSingerParamer(@RequestParam("username") String name, Integer password){
System.out.println("客户端发来的name: "+name);
System.out.println("客户端发来的password: "+password);
}
}