Spring MVC参数接收、参数传递

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

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

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

1.基本数据类型

编写controller

  @RequestMapping("/controller3")
    public String controller3(String name,Model model){
        model.addAttribute("msg",name);
        return "success";
    }

 在index.jsp里面定义超链接

接收参数—基本数据类型

结果:

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

2.POJO类型参数绑定

编写pojo

package com.by.pojo;



import java.io.Serializable;
import java.util.Date;

public class Account implements Serializable {
    private Integer id;
    private String name;
    private Float money;
    private Address address;
    private Date date;


    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                ", address=" + address +
                ", date=" + date +
                '}';
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Float getMoney() {
        return money;
    }

    public void setMoney(Float money) {
        this.money = money;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}
package com.by.pojo;

import java.io.Serializable;

public class Address implements Serializable {
    private String provinceName;
    private String cityName;
     //省略get set toString方法


    @Override
    public String toString() {
        return "Address{" +
                "provinceName='" + provinceName + '\'' +
                ", cityName='" + cityName + '\'' +
                '}';
    }

    public String getProvinceName() {
        return provinceName;
    }

    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
}

 编写controller

 @RequestMapping("/controller9")
    public String controller9(Account account, Model model){
        model.addAttribute("msg",account);
        return "success";
    }

在index.jsp里面添加表单

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

结果:

Spring MVC参数接收、参数传递_第2张图片

3.restful风格

  • restful概述:

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

3.1restful风格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上使用/{}占位符。

3.2@PathVaribale

  • 作用

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

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

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

 @RequestMapping("/controller10/{id}")
    public String controller10(@PathVariable("id") Integer id,Model model){
        model.addAttribute("msg",id);
        return "success";
    }

 测试:在index.jsp里面定义超链接

  restful

结果:

Spring MVC参数接收、参数传递_第3张图片

4.请求参数乱码问题

4.1POST请求方式解决乱码问题

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


    
        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter

        
            encoding
            UTF-8
        
    
    

        CharacterEncodingFilter
        /*
    

 测试

Spring MVC参数接收、参数传递_第4张图片

4.2GET请求方式解决乱码问题

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


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

5.自定义类型转换器

5.1使用场景

 在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参数接收、参数传递_第5张图片

Spring MVC参数接收、参数传递_第6张图片

  • 原因

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

5.2自定义类型转换器

 Converter接口说明:

Spring MVC参数接收、参数传递_第7张图片 

定义一个类,实现Converter接口

package com.by.converter;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateConverter implements Converter {
    @Override
    public Date convert(String str) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date date = sdf.parse(str);
            return date;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}

 在 springmvc.xml配置文件中配置类型转换器






    
        
        
            
                
                
            
        
    

结果:

6.使用ServletAPI接收参数

 编写controller

  @RequestMapping("/controller12")
    public String controller12(HttpServletRequest request){
        String name = request.getParameter("name");
        Float money = Float.valueOf(request.getParameter("money"));
        request.setAttribute("msg",name+"===="+money);
        return "success";
    }

 在index.jsp里面定义超链接

servlet接收参数

结果:

Spring MVC参数接收、参数传递_第8张图片

 

7.参数传递

7.1ModelAndView传递

编写controller

  @RequestMapping("/controller13")
    //也可以不创建ModelAndView,直接在参数中指定
    public ModelAndView controller13(ModelAndView mv){
        mv.addObject("msg","李寒衣");
        mv.setViewName("success");
        return mv;
    }

 在index.jsp里面定义超链接

ModelAndView参数传递

结果:

Spring MVC参数接收、参数传递_第9张图片

7.2Model传递

 编写controller

 @RequestMapping("/controller14")
    public String controller10(Model model){
      model.addAttribute("msg","天女蕊");
        return "success";
    }

 在index.jsp里面定义超链接

Model参数传递

结果:

Spring MVC参数接收、参数传递_第10张图片

7.3ServletAPI传递

 编写controller

  @RequestMapping("/controller15")
    public String controller15(HttpServletRequest request){
        request.setAttribute("msg","唐莲");
        return "success";
    }

  在index.jsp里面定义超链接

  Servlet API 参数传递

结果

8.总结:

接收参数
    1、基本类型(少量)
       

        public String findAccount7(String name, Model model){
        }
    2、pojo(多个)
       

        public String findAccount8(Account account, Model model){
        }
    3、restful
       

        @RequestMapping("/findAccount10/{id}")
        public String findAccount10(@PathVariable Integer id){

        }
    4、日期类型转换器
        public class DateConverter implements Converter {
        }

       
       

       
       
           
               
                   
               

           

       

    3、中文乱码
        1)post方式
           
                CharacterEncodingFilter
                org.springframework.web.filter.CharacterEncodingFilter
               
                    encoding
                    UTF-8
               

           

           
                CharacterEncodingFilter
                /*
           

        2)get方式
            new String(name.getBytes(),"UTF-8");

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