SpringMVC获取参数

举报
bug郭 发表于 2022/10/06 22:26:07 2022/10/06
【摘要】 获取参数获取参数,就是获取到客户端给我们服务器传来的参数! 传递单个参数@Controller@RequestMapping(value = "/parame",method = RequestMethod.POST)//接收post请求@ResponseBody //可以返回非静态页面!public class GetParameter { @RequestMapping("/ge...

获取参数

获取参数,就是获取到客户端给我们服务器传来的参数!

传递单个参数

@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);
    }
}

在这里插入图片描述

设置参数必传(@RequestParam)

在这里插入图片描述
当我们加了这个注解后如果,前端的名称不匹配,就会报错!
可能你会疑惑,刚刚没重命名都只是接收不到数据而已,也不会报错呀!
为啥会这样呢?

因为我们@RequestParam注解加上后,默认该参数必传,如果前端没有传递该名称的参数就会报错!

修改默认参数必传
@RequestParame("username",requird=false)
修改required属性值为false即可修改默认!
在这里插入图片描述
修改为false后,我们没有传递username参数也不会报错!
在这里插入图片描述

RequestBody接收json数据

我们直接前端发送json数据给服务器:
在这里插入图片描述
显然服务器接收不到!

我们通过在参数上加上@RequestBody就可以接收到json数据了!
在这里插入图片描述

获取URL中的参数@PathVariable

@ResponseBody
@Controller
@RequestMapping("/user")
public class Path {
    @GetMapping("get/{name}/{password}")
    public void getPathVariable(@PathVariable String name,@PathVariable String password){
        System.out.println("name:"+name);
        System.out.println("password:"+password);
    }
}

在参数上加上@PathVariable注解还有在Mapping路由设置上加上对应的参数名!@GetMapping("get/{name}/{password}")
在这里插入图片描述

在这里插入图片描述

上传文件@RequestPart

@Controller
@ResponseBody
@RequestMapping("/file")
public class ParamePart {
    @RequestMapping("/get")
    public void getPart(@RequestPart MultipartFile file) throws IOException {
        //将前端的文件保存在服务器路径
        String filePath = file.getOriginalFilename();
        //文件保存路径
        String path = "D:/java/上传/"+filePath;
        //创建文件对象
        File desc = new File(path);
        //该文件目录在磁盘中不存在,就创建该目录
        if(!desc.exists()){
            desc.mkdir();
        }
        //上传到该目录下
        file.transferTo(desc);
    }
}

未上传前
在这里插入图片描述

启动项目!
上传文件
在这里插入图片描述

在这里插入图片描述
注意:

上传文件默认文件最大值大小是有限制的,所以如果没有修改单次文件上传大小,上传大文件就可能会服务器报错!

获取Cookie/Session/header

@Controller
@RequestMapping("/header")
public class Param {
    @RequestMapping("/get")
    public void getHeader(HttpServletRequest request, HttpServletResponse response){
        //这里获取cookie方式和之前Servlet一样,因为SpringMVC基于Servlet API
        //获取cookie
        Cookie[] cookies = request.getCookies();
        System.out.println(Arrays.toString(cookies));
        //获取Header中的其他信息
        String UserAgent = request.getHeader("User-Agent");
        System.out.println(UserAgent);
    }
}

在这里插入图片描述

也可以通过注解@CookieValue获取Cookie和@RequestHeader获取Header

@Controller
@RequestMapping("/header")
public class Param {
    @RequestMapping("/get")
    public void getHeader(HttpServletRequest request, HttpServletResponse response){
        //这里获取cookie方式和之前Servlet一样,因为SpringMVC基于Servlet API
        //获取cookie
        Cookie[] cookies = request.getCookies();
        System.out.println(Arrays.toString(cookies));
        //获取Header中的其他信息
        String UserAgent = request.getHeader("User-Agent");
        System.out.println(UserAgent);
    }
    @RequestMapping("/get1")
    public String get1(@RequestHeader("User-Agent") String UserAgent , @CookieValue("bug") String cookieValue){
        System.out.println("UserAgent:"+UserAgent+" \n Cookie bug:"+cookieValue);
        return " ";
    }
}

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。