Spring MVC 参数接收

参数接收

Springmvc中,接收页面提交的数据是通过方法形参来接收:

  • 处理器适配器调用springmvc使用反射将前端提交的参数传递给controller方法的形参

  • springmvc接收的参数都是String类型,所以spirngmvc提供了很多converter(转换器)在特殊情况下需要自定义converter,如对日期数据

基本数据类型

  • 编写controller

    @Controller
    @RequestMapping("/account")
    public class AccountController {
    ​
        @RequestMapping("/findAccount5")
        public String findAccount5(String username,Model model){
            model.addAttribute("msg", username);
            return "success";
        }
        
        @RequestMapping("/findAccount6")
        public String findAccount6(String username,Integer age,Model model){
            model.addAttribute("msg", username+" "+age);
            return "success";
        }
    }
  • 在index.jsp里面定义超链接

    参数接收-基本数据类型
    参数接收-多个基本数据类型

POJO类型参数绑定

  • 编写pojo

    public class Account implements Serializable {
        private Integer id;
        private String name;
        private Float money;
        private Address address;
       //省略get set toString方法
     }
    public class Address implements Serializable {
        private String provinceName;
        private String cityName;
         //省略get set toString方法
     }
  • 编写controller

    package com.by.controller;
    ​
    import com.by.pojo.Account;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;
    ​
    @Controller
    @RequestMapping("/account")
    public class AccountController {
    ​
        @RequestMapping("/saveAccount")
        public String saveAccount(Account account, Model model){
            model.addAttribute("msg", account);
            return "success";
        }
    }

  • 在index.jsp里面添加表单

      账户名称:
      账户金额:
      账户省份:
      账户城市:
       

restful风格

  • restful概述:

(Representational State Transfer,表现层状态转移):URL定位资源时,用HTTP动词(GET,POST,DELETE,PUT)描述操作

restful风格URL

  • 在Restful之前的操作: http://127.0.0.1/user/query?id=1 根据用户id查询用户数据 http://127.0.0.1/user/save 新增用户 http://127.0.0.1/user/update?id=1 修改用户信息 http://127.0.0.1/user/delete?id=1 删除用户信息

  • RESTful用法: http://127.0.0.1/user/1 GET 根据用户id查询用户数据 http://127.0.0.1/user POST 新增用户 http://127.0.0.1/user PUT 修改用户信息 http://127.0.0.1/user/1 DELETE 删除用户信息

  • RESTful总结:

    Restful风格就是请求url统一,根据不同的请求方式,请求不同的后台方法。如果需要携带参数,在url上使用/{}占位符。

@PathVaribale

  • 作用

    用于绑定url中的占位符。例如:/account/{id},这个{id}就是url占位符

    url支持占位符是spring3.0之后加入的,是springmvc支持rest风格url的重要标志。

  • 描述需要使用指定的请求方式来请求该方法

    @Controller
    @RequestMapping("/account")
    public class AccountController {
        
        @RequestMapping(value="/findAccount7/{id}")
        public String findAccount11(@PathVariable Integer id, Model model){
            model.addAttribute("msg", id);
            return "success";
        }
    }
  • 测试:在index.jsp里面定义超链接

    restful传参

请求参数乱码问题

POST请求方式解决乱码问题

  • 在web.xml里面设置编码过滤器

    
      CharacterEncodingFilter
      
        org.springframework.web.filter.CharacterEncodingFilter
      
      
      
        encoding
        UTF-8
      
    
    
    
      CharacterEncodingFilter
      /*
    
  • 测试

    Spring MVC 参数接收_第1张图片

GET请求方式解决乱码问题

  • tomcat对GET和POST请求处理方式是不同的,GET请求的编码问题,要改tomcat的 配置信息,如下:

    
        org.apache.tomcat.maven
        tomcat7-maven-plugin
        2.2
        
            8080
            /
            
            UTF-8
        
    

自定义类型转换器

使用场景

  • 在index.jsp里面添加日期类型

        
        账户名称:
        账户金额:
        账户省份:
        账户城市:
        开户日期:
             
  • 在pojo里面添加日期类型

    public class Account implements Serializable {
        private Integer id;
        private String name;
        private Float money;
        private Address address;
        //添加日期类型
        private Date date;
        //省略get set toString方法
    }    
  • 测试

    Spring MVC 参数接收_第2张图片Spring MVC 参数接收_第3张图片
  • 原因

    我们前台传递的是字符串类型的参数,但是后台使用的是Date类型接收的。我们期望springmvc可以帮我们做数据类型的自动转换,显然没有做,所以我们需要自己自定义类型转换器。

自定义类型转换器

  1. Converter接口说明:

    Spring MVC 参数接收_第4张图片
  2. 定义一个类,实现Converter接口

    public class DateConverter implements Converter {
        @Override
        public Date convert(String source) {
            try {
                DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                return format.parse(source);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }
  3. 在 springmvc.xml配置文件中配置类型转换器

        
        
        
        
            
            
                
                    
                    
                
            
        

使用ServletAPI接收参数

  • 编写controller

    @Controller
    @RequestMapping("/account")
    public class AccountController {
    ​
        @RequestMapping("/findAccount8")
        public String findAccount8(HttpServletRequest request, 
                                   HttpServletResponse response){
            String username = request.getParameter("name");
            String age = request.getParameter("age");
            request.setAttribute("msg",username+" "+age);
            return "success";
        }
    }
  • 在index.jsp里面定义超链接

    Servlet接收参数

你可能感兴趣的:(Spring,MVC,spring,mvc,java)