您当前的位置: 首页 >  spring

水的精神

暂无认证

  • 1浏览

    0关注

    711博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

(2019.7)springMVC——参数绑定

水的精神 发布时间:2019-07-12 16:20:06 ,浏览量:1

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

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

  比方说我发这这样的请求: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 +
                '}';
    }
}

前端页面:




Hello World!


    用户名:
    密码:
    缴费:
    学生姓名:
    学会年龄:
    




 这里就应该注意一下了,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 {

    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的配置文件中去。


    
        
            
                
            
        
    

 

关注
打赏
1664074814
查看更多评论
立即登录/注册

微信扫码登录

0.2141s