• SpringMVC的请求


    获得请求参数

    接受的数据类型

    • 基本类型参数
    • POJO类型参数
    • 数组类型参数
    • 集合类型参数

    获得的基本类型参数

    Contoller中的业务方法的参数名称要与请求的参数的name一直,参数值会自动映射匹配

       @RequestMapping("/quick11")
        @ResponseBody//告知springMVC不是视图跳转,直接进行数据相应
    //    期望SpringMVC自动将User转化为json格式
        public void save11(String username ,int age) throws IOException {
            System.out.println(username);
            System.out.println(age);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    获取POJO类型参数

    package zcf.daomian;
    
    public class User {
        private String username;
        private int age;
    
        public User(String username, int age) {
            this.username = username;
            this.age = age;
        }
        public User() {
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getUsername() {
            return username;
        }
    
        public int getAge() {
            return age;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
        @RequestMapping("/quick12")
        @ResponseBody//告知springMVC不是视图跳转,直接进行数据相应
    //    期望SpringMVC自动将User转化为json格式
        public void save12(User user) throws IOException {
            System.out.println(user);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    获得数组类型的参数

    Conroller中的业务方法数组名称与请求参数的name一直,参数会自动映射匹配

        @RequestMapping("/quick13")
        @ResponseBody//告知springMVC不是视图跳转,直接进行数据相应
    //    期望SpringMVC自动将User转化为json格式
        public void save13(String[] strs) throws IOException {
            System.out.println(strs);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    获得集合类型的参数

    获得一个集合参数时候,要将集合参数包装到一个POJO中才可以。

    package zcf.daomian;
    
    import java.util.List;
    
    public class VO {
        private List userList;
    
        public List getUserList() {
            return userList;
        }
    
        public void setUserList(List userList) {
            this.userList = userList;
        }
    
        @Override
        public String toString() {
            return "VO{" +
                    "userList=" + userList +
                    '}';
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
        @RequestMapping("/quick14")
        @ResponseBody//告知springMVC不是视图跳转,直接进行数据相应
    //    期望SpringMVC自动将User转化为json格式
        public void save14(VO vo) throws IOException {
            System.out.println(vo);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    使用ajax提交,可以指定contentType为json格式,那么在方法参数位置使用@RequestBody可以直接收集集合数据无需使用pojo进行包装

        @RequestMapping("/quick14")
        @ResponseBody//告知springMVC不是视图跳转,直接进行数据相应
    //    期望SpringMVC自动将User转化为json格式
        public void save14(@RequestBody List userList) throws IOException {
            System.out.println(userList);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    请求数据乱码问题

    post请求是,中文会出现乱码,可以设置一个过滤器进行编码过滤

    
      
        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
          encoding
          UTF-8
        
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    参数绑定注解

    当请求的参数名称和controller的业务方法名称不一致时,就需要通过@RequestParam注解显示的绑定

        @RequestMapping("/quick16")
        @ResponseBody//告知springMVC不是视图跳转,直接进行数据相应
    //    期望SpringMVC自动将User转化为json格式
    
        public void save16(@RequestParam(value = "name") String username ,int age) throws IOException {
            System.out.println(username);
            System.out.println(age);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    @RequestParam注解可用参数

    • value:请求参数名称
    • required:指定请求参数是否是必传,默认为true,提交时候如果没有此参数则直接报错
    • defaultValue:当没有指定请求参数时,则使用指定的默认值赋值
        @RequestMapping("/quick16")
        @ResponseBody//告知springMVC不是视图跳转,直接进行数据相应
    //    期望SpringMVC自动将User转化为json格式
    
        public void save16(@RequestParam(value = "name",required = false,defaultValue = "张三") String username ,int age) throws IOException {
            System.out.println(username);
            System.out.println(age);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    获得Restful风格的参数

    • Restful是一种框架风格、设计风格,不是标准,只是提供了一种设计原则和约束条件。主要用于客户端和服务器交互类软件,基于这个风格的软件可以更简洁,更有层次,更易于实现缓存机制。
    • Restful风格请求是使用"url+请求方式"表示一次请求目的,http协议里边四个表示操作方式的动词如下:
      GET:用于获取资源
      POST:用于新建资源
      PUT:用于更新资源
      DELETE:用于删除资源
    • springMVC中可以使用占位符进行参数绑定。业务方法中可以使用@PathVariable注释进行占位符的匹配获取

    自定义类型转换器

    自定义类型转化器的开放步骤

    1. 定义转化器类实现Converter接口
    2. 在配置文件器中声明转化器
    3. 在中引用转化器
    
    
    
        
            
                
                    
    
                    
                
            
    
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    package zcf.converter;
    
    
    import org.springframework.core.convert.converter.Converter;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class DataConverter implements Converter {
    
        @Override
        public Date convert(String dataStr) {
            Date date = null;
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            try {
                date = format.parse(dataStr);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return date;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    获取Servlet相关API

    支持原始的ServletAPI对象作为控制器方法的参数进行注入,常用对象如下:

    • HttpServletRequest
    • HttpServletResponse
    • HttpSession
        @RequestMapping("/quick19")
        @ResponseBody//告知springMVC不是视图跳转,直接进行数据相应
    //    期望SpringMVC自动将User转化为json格式
        public void save19(HttpServletResponse response, HttpServletRequest request, HttpSession session) throws IOException {
            System.out.println(response);
            System.out.println(request);
            System.out.println(session);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    获取请求头

    @RequestHeader

    使用@RequestHeader可以获取请求头信息
    @RequestHeader属性如下:

    • value:请求头
    • required:是否必须携带此请求头
        @RequestMapping("/quick20")
        @ResponseBody//告知springMVC不是视图跳转,直接进行数据相应
    //    期望SpringMVC自动将User转化为json格式
    
        public void save20(@RequestHeader(value = "User-Agent",required = false) String user_agent) throws IOException {
            System.out.println(user_agent);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    @CookieValue

    使用 @CookieValue可以获取指定Cookie的值
    @CookieValue注释的属性

    • value:指定cookie的名称
    • required:是否必须携带此cookie
        @RequestMapping("/quick21")
        @ResponseBody//告知springMVC不是视图跳转,直接进行数据相应
    //    期望SpringMVC自动将User转化为json格式
    
        public void save20(@CookieValue(value = "JESSIONID",required = false) String jessionId) throws IOException {
            System.out.println(jessionId);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    文件上传

    文件上传客户端三要素

    • 表单项type=“file”
    • 提交方式是post
    • 表单的enctype属性是多部份表单形式,即enctype=“multipart/form-data”## 文件上传

    单文件上传步骤

    1. 导入fileupload和io坐标
    2. 配置文件上传解析器
    3. 编写代码

    坐标

        
          commons-fileupload
          commons-fileupload
          1.3.1
        
        
          commons-io
          commons-io
          2.6
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    配文件上传解析器

    
        
            
            
        
        
            
            
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    代码

        @RequestMapping("/quick22")
        @ResponseBody//告知springMVC不是视图跳转,直接进行数据相应
        public void save22(String username, MultipartFile uploadFile) throws IOException {
            System.out.println(username);
            System.out.println(uploadFile);
    //        获得上传文件名称
            String originalFilename = uploadFile.getOriginalFilename();
            uploadFile.transferTo(new File("C:\\upload\\"+originalFilename));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    多文件上传

        @RequestMapping("/quick23")
        @ResponseBody//告知springMVC不是视图跳转,直接进行数据相应
        public void save23(String username, MultipartFile[] uploadFile) throws IOException {
            System.out.println(username);
            System.out.println(uploadFile);
    //        获得上传文件名称
            for (MultipartFile multipartFile:
                 uploadFile) {
                String originalFilename = multipartFile.getOriginalFilename();
                multipartFile.transferTo(new File("C:\\upload\\"+originalFilename));
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    前端相关面试题--html
    成都精灵云C++ 二面(hr面,30min)
    监控——前端性能监控方案
    doccano安装问题
    Java学习day12:static关键字,字符串声明,字符串常量池
    try/catch/finally的各种情况
    232. 用栈实现队列(简单)
    【算法】使数组有序的最小交换次数
    python创建虚拟环境
    转码服务serverless探索
  • 原文地址:https://blog.csdn.net/ChenfengZhang/article/details/126905807