(2019.7)springMVC——参数绑定

  所谓参数绑定就是将请求传过来的参数进行相关的处理,这是前后端进行数据交互很重要的一部分。

# # 首先是简单的参数传递

  比方说我发这这样的请求:http://localhost:8080/user/paramTest?username=zhangshan&password=123456

  可以看到的是我传了两个参数,分别是username和password,如果我的controller想要获取参数只需要:

 这样只能满足接受零散的请求参数,一个两个都ok,但是我们知道参数列表是要尽量少的。

 

# # 复杂的参数传递

  比方说是提交一个表单,我们肯定不会一个参数一个参数的传递的,这显然很麻烦,我们一般采用将数据封装到一个 javaBean中去的方式。

  来个demo

  只需要提供一个实体类,然后属性和我们要提交的参数对应起来,才处理的controller上,框架就会帮我们自动的封装到实体类中去。同时这个实体类,还可以有引用类型的属性

public class Account implements Serializable {
    private String username;
    private String password;
    private double money;

    //一个引用类型的属性
    private Student student;

    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 Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }

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

前端页面:

<%@page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
<form action="/user/paramTest"method="post">

    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    缴费:<input type="text" name="money"><br>
    学生姓名:<input type="text" name="student.name">
    学会年龄:<input type="text" name="student.age">
    <input type="submit" value="提交">

</form>
</body>
</html>

 这里就应该注意一下了,input框的name属性的值都是我们定义好的实体类的属性的值,名字对应起来。实体类提供set get 方法,就能够将前端页面行的数据存储在对象里边,传递到后台,即使是引用类型,就像student.age,这样对应起来,依然能够传递。

  最后后端想要将数据取出来,也很简单,只需要传参数传入一个实体类对象就可以了:
 

  @RequestMapping("paramTest")
    public String paramTest(Account account){
        System.out.println(account.getUsername());
        System.out.println(account.getPassword());
        System.out.println(account.getMoney());
        System.out.println(account.getStudent().getName());
        System.out.println(account.getStudent().getAge());
        return "success";
    }

 

 # # 这里有一个神奇的情况, 就是前端向后台提交数据的时候,框架会给我们自动类型转换,比方说是自动将 字符串类型给我们装转成了Integer类型的。 这是框架自定义好的类型转换器。我们用起来,基本上不用自己再写,但是肯定会会有自动转换不了 的情况,这就需要我们自定义类型转换器了。

 自定义的类型转化器如下:

package com.angus.utils;

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

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

public class StringToDateConverter implements Converter<String, Date> {

    public Date convert(String source) {
        if (source == null) {
            throw new RuntimeException("请传入非空的参数");
        }
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            return dateFormat.parse(source);
        } catch (Exception e) {
            throw new RuntimeException("转换出错");
        }
    }
}

   这就相当于是自己定义了一个组件,那想要它生效,就要自己去配置它:这个如果整合SSM就放在applicationContext.xml中

如果只是使用spring 的话,就放在springMVC的配置文件中去。

<!-- 自定义类型转化器 -->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.angus.utils.StringToDateConverter"/>
            </set>
        </property>
    </bean>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值