SpringMVC(2)请求参数的绑定

请求参数的绑定

绑定机制

  • 表单提交的数据都是k=v格式的,如username=haha&password=123
  • SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
  • 要求:提交表单的name和参数的名称是相同的

支持的数据类型

基本数据类型和字符串类型

要求:提交表单的name和参数的名称是相同的

举例:

param.jsp

<a href="param/testParam?username=hehe&password=123">RequestMapping注解</a>

ParamController

@Controller
@RequestMapping("/param")
public class ParamController {
    // 基本数据类型
    @RequestMapping("/testParam")
    public String testParam(String username,String password){
        System.out.println("基本数据类型");
        System.out.println("用户名:"+username);
        System.out.println("密码:"+password);
        return "success";
    }
}

实体类型(JavaBean)

name 必须和bean中的属性名称一样;

构建一个实体类

public class Account implements Serializable {

    private String username;
    private String password;
    private Double money;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Double getMoney() {
        return money;
    }

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

    @Override
    public String toString() {
        return "Account{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", money=" + money +
                '}';
    }
}

Controller

//请求参数绑定把数据封装到JavaBean的类中
@RequestMapping("/saveAccount")
public String saveAccount(Account account){
    System.out.println("执行了...");
    System.out.println(account);
    return "success";
}

输出结果

解决中文乱码问题,在web.xml中配置

<!--配置解决中文乱码的过滤器-->
<filter>
  <filter-name>characterEncodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>characterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

如果Account中有User类型,在此之前我们需要先配置一个User类

public class User implements Serializable {

    private String uname;
    private Integer age;

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "uname='" + uname + '\'' +
                ", age=" + age +
                '}';
    }
}

Account类

public class Account implements Serializable {

    private String username;
    private String password;
    private Double money;

    private User user;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Double getMoney() {
        return money;
    }

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

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public String toString() {
        return "Account{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", money=" + money +
                ", user=" + user +
                '}';
    }
}

params.jsp文件

<form action="param/saveAccount" method="post">
    姓名:<input type="text" name="username" /><br/>
    密码:<input type="text" name="password" /><br/>
    金额:<input type="text" name="money" /><br/>
    用户姓名:<input type="text" name="user.uname" /><br/>
    用户年龄:<input type="text" name="user.age" /><br/>
    <input type="submit" value="提交" />
</form>

请求参数绑定到方法上,方法不变

输出结果:

集合数据类型(List、map)

public class Account implements Serializable {

    private String username;
    private String password;
    private Double money;

    private List<User> list;
    private Map<String,User> map;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Double getMoney() {
        return money;
    }

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

    public List<User> getList() {
        return list;
    }

    public void setList(List<User> list) {
        this.list = list;
    }

    public Map<String, User> getMap() {
        return map;
    }

    public void setMap(Map<String, User> map) {
        this.map = map;
    }

    @Override
    public String toString() {
        return "Account{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", money=" + money +
                ", list=" + list +
                ", map=" + map +
                '}';
    }
}

params.jsp文件

<!--把数据封装到Account类中,类中存在list和map集合-->
<form action="param/saveAccount" method="post">
    姓名:<input type="text" name="username" /><br/>
    密码:<input type="text" name="password" /><br/>
    金额:<input type="text" name="money" /><br/>
    用户姓名:<input type="text" name="list[0].uname" /><br/>
    用户年龄:<input type="text" name="list[0].age" /><br/>

    用户姓名:<input type="text" name="map['one'].uname" /><br/>
    用户年龄:<input type="text" name="map['one'].age" /><br/>
    <input type="submit" value="提交" />
</form>

输出结果

自定义类型转换器

表单提交的任何数据类型全部都是字符串类型,但是后台定义Integer类型,数据也可以封装上,说明Spring框架内部会默认进行数据类型转换。

如果想自定义数据类型转换,可以实现Converter的接口。

  1. 在user类中加入新的date属性

    public class User implements Serializable {
    
        private String uname;
        private Integer age;
        private Date date;
    
        public String getUname() {
            return uname;
        }
    
        public void setUname(String uname) {
            this.uname = uname;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public Date getDate() {
            return date;
        }
    
        public void setDate(Date date) {
            this.date = date;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "uname='" + uname + '\'' +
                    ", age=" + age +
                    ", date=" + date +
                    '}';
        }
    }
  2. 表单
    <form action="param/saveUser" method="post">
        用户姓名:<input type="text" name="uname" /><br/>
        用户年龄:<input type="text" name="age" /><br/>
        出生日期:<input type="text" name="date"/><br/>
        <input type="submit" value="提交" />
    </form>
  3. 请求参数绑定到方法
    @RequestMapping("/saveUser")
    public String saveUser(User user){
        System.out.println("user保存了");
        System.out.println(user);
        return "success";
    }

    页面输入

    输出结果:

页面输入格式有问题,就会出现400错误。

解决方法:

自定义类型转换器StringToDateConverter

public class StringToDateConverter implements Converter<String,Date> {

    /**
     * String source    传入进来字符串
     * @param source
     * @return
     */
    public Date convert(String source) {
        // 判断
        if(source == null){
            throw new RuntimeException("请您传入数据");
        }
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

        try {
            // 把字符串转换日期
            return df.parse(source);
        } catch (Exception e) {
            throw new RuntimeException("数据类型转换出现错误");
        }
    }
}

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

<!--配置自定义类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="com.ben.utils.StringToDateConverter"/>
        </set>
    </property>
</bean>
<!-- 开启SpringMVC框架注解的支持 -->
<mvc:annotation-driven conversion-service="conversionService"/>

输出结果

原文地址:https://www.cnblogs.com/benjieqiang/p/11331742.html

时间: 2024-10-10 09:33:40

SpringMVC(2)请求参数的绑定的相关文章

SpringMVC中请求参数的绑定

1.请求参数的绑定说明 1.绑定机制:SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的 2.要求:提交表单的name属性与控制器方法的参数名称相同. 2.支持的数据类型 1.基本数据类型和字符串类型 2.JavaBean 3.集合数据类型 例1:绑定字符串类型 前端from表单中的"username"和"password"与控制器中的方法参数名称一致! 1 //---------------前端----------------

请求参数的绑定

1.例如:ParamController.java /*请求参数的绑定*/ @RequestMapping("/testParam") public String testParam(String username,String password){ sout("执行了..."): sout("用户名"+username); return "success"; }} 对应的param.jsp有 <%--请求参数的绑定--

SpringMVC之请求参数的获取方式

转载出处:https://www.toutiao.com/i6510822190219264516/ SpringMVC之请求参数的获取方式 常见的一个web服务,如何获取请求参数? 一般最常见的请求为GET和POST,get请求的参数在url上可以获取,post请求参数除了url上还有可能在表单中,文件上传时,获取方式又和一般的参数获取不一样 本篇则主要集中在不同请求方式下,获取参数的使用姿势 首先需要搭建一个后端的请求,为了快速演示 利用spring-boot创建了一个机器简单的工程,依赖版

springmvc:请求参数绑定集合类型

一.请求参数绑定实体类 domain: 1 private String username; 2 private String password; 3 private Double money; 4 5 private User user; 1 <%--把数据封装到Account类中--%> 2 <form action="param/saveAccount" method="post"> 3 姓名:<input type="

SpringMVC RequestMapping &amp; 请求参数

SpringMVC 概述 Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一 Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架 Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口. 支持 REST 风格的 URL 请求 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性 HelloWorld 步骤: –加入 jar 包 –在 web.xml 中配置

请求参数的绑定 请求参数乱码问题

绑定的机制 表单中请求参数都是基于 key=value 的 SpringMVC 绑定请求参数的过程是通过   把表单提交请求参数,作为控制器中方法参数   进行绑定的 例如: <a href="account/findAccount?accountId=10">查询账户</a> 中请求参数是:   accountId=10 /** * 查询账户 * @return */ @RequestMapping("/findAccount") publ

关于springMVC的请求参数如何处理(@RequestMapping 来映射请求参数)

用 @RequestMapping来解析http请求中的参数. 1   通过浏览器发送一个带参数的get请求来访问服务器中的服务, http://localhost:8080/springmvc/RequestParam/testRequestParam2?username=xiaoming&age=11 url描述了一个get请求 域名为springmvc  ,后端是一个控制器的映射RequestParam,testRequestParam2是发布的服务名的映射,问号后面对应的请求参数和参数值

SpringMVC——接收请求参数和页面传参

转自:http://blog.csdn.net/z69183787/article/details/41653875 1.接收请求请求 (1)使用HttpServletRequest获取,如request.getParameter("name") (2)@RequestParam("pass")String password,或@Param("pass")String password.表单参数也可以用这种方式获取,Spring会自动将表单参数注

springmvc的请求参数

@RequestMapping("/testRequestParam") public String testRequestParam(@RequestParam("username") String name,@RequestParam(value="password",required=false,defaultValue="0") int password){ System.out.println("usern