SpringMVC-请求参数的绑定

SpringMVC请求参数的绑定

1.参数绑定

  1.1 绑定的机制

  表单中请求参数都是key=value的,SpringMVC绑定请求参数的过程是通过把表单请求参数,作为控制器中方法参数进行绑定的。

  例如:
  <a href="account/findAccount?accountId=10">查询账户</a>
  中的参数是:accountId=10
  控制器所对应的参数为:
  @RequestMapping("/findAccount")
  public String findAccount(Integer accountId) {
    System.out.println("查询了账户。。。。"+accountId);
    return "success";
  }

  1.2 支持的数据类型:

  基本数据类型的参数:

    包括基本类型和String类型。(注:Spring不属于八大基本类型)

  Pojo类型的参数:

    包括实体类,以及关联的实体类

  数组和集合类型参数:

    包括List结构和Map结构的集合(包括数组)

SpringMVC绑定请求参数时自动实现的,但是要想使用,必须遵循使用要求。

  1.3 使用要求

    如果是基本类型和String类型:

      要求我们的参数名称必须和控制器中方法的形参名称一致。(严格区分大小写)

    如果是pojo类型,或者它的关联对象:

      要求表单中参数名称和Pojo类的属性名称保持一致。并且控制器方法的参数类型是Pojo类型

    如果是集合类型,有两种方式:

      第一种:要求集合类型的请求参数必须在Pojo中。在表单中请求参数名称必须要和Pojo中属性名称相同。

          给List集合中的元素赋值,使用下标。

          给Mpa集合中的元素赋值,使用键值对

      第二种:接收的请求参数是json格式数据。需要借助一个注解实现。(@RequestBody)

2.使用示例

  2.1 基本类型和String类型作为参数  

  Jsp代码:

<a href="params/requestMappering?username=张三&title=nihao">请求参数绑定</a>

  控制器代码:

    /**
     * 参数绑定
     * @param username
     * @param title
     * @return
     */
    @RequestMapping(value = "/requestMappering")
    public String paramsRequest(String username, String title){
        System.out.println(username + "========" +title);
        return "success";
    }

  运行结果:

  

  2.2 Pojo类型作为参数

  实体类代码:

User实体类:
public
class User implements Serializable{ private String username; private Integer age; private Date birthday;
}
Account实体类:

public
class Account implements Serializable { private String accountname; private String password; private Double salary;
private User user;
}
jsp代码:
<form action="/params/account" method="post">
    账户名:<input name="accountname" type="text"><br>
    密码:<input name="password" type="text"><br>
    金额:<input name="salary" type="text"><br>
    姓名:<input name="user.username" type="text"><br>
    年龄:<input name="user.age" type="text"><br>
    <input value="提交" type="submit">
</form>

  控制器代码:

/**
     * 参数绑定—javabean
     * @return
     */
    @RequestMapping(value = "/account")
    public String findAccount(Account account){
        System.out.println(account);
        return "success";
    }

 

运行结果:

 

  2.3 Pojo类中包含集合类型参数

    实体类代码:

Account实体类:
public
class Account implements Serializable { private String accountname; private String password; private Double salary; // private User user; private List<User> lists; private Map<String, User> maps; }
User实体类:
public class User implements Serializable{

    private String username;
    private Integer age;

    private Date birthday;
}

  Jsp代码:

<form action="/params/account" method="post">
    账户名:<input name="username" type="text"><br>
    密码:<input name="password" type="text"><br>
    金额:<input name="salary" type="text"><br>
    <%--封装List--%>
    姓名:<input name="lists[0].username" type="text"><br>
    年龄:<input name="lists[0].age" type="text"><br>
    <%--map--%>
    姓名:<input name="maps['one'].username" type="text"><br>
    年龄:<input name="maps['one'].age" type="text"><br>
    <input value="提交" type="submit">
</form>

  控制器代码:

/**
     * 参数绑定—javabean
     * @return
     */
    @RequestMapping(value = "/account")
    public String findAccount(Account account){
        System.out.println(account);
        return "success";
    }

  运行结果:   

  2.4 自定义类型转换器

    自定义date转换器,将字符串转换为日期:

package com.llb.util;


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

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

/**
 * 自定义类型转换器
 * 将字符串转换成日期
 * Ceate By llb on 2019/8/13
 */
public class StringToDateConverter implements Converter<String, Date> {

    @Override
    public Date convert(String str) {

        if(str == null){
            throw new RuntimeException("请您传入数据!");
        }

        DateFormat df ;

        try {
            if(str.contains("-")){
                df = new SimpleDateFormat("yyyy-MM-dd");
            }else {
                df = new SimpleDateFormat("yyyy/MM/dd");
            }

            //把字符串转换成日期
            return df.parse(str);
        } catch (ParseException e) {
           throw new RuntimeException("日期类型转换失败!");
        }
    }
}

  springmvc.xml配置:

在 spring 配置文件中配置类型转换器,
在 annotation-driven 标签中引用配置的类型转换服务 。
<!--配置自定义类型转换器-->
        <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
            <property name="converters">
                <set>
                    <bean class="com.llb.util.StringToDateConverter"/>
                </set>
            </property>
        </bean>
<!--开启springmvc框架的注解支持-->
    <mvc:annotation-driven conversion-service="conversionService"/>

 

  jsp代码:

<form action="/params/saveUser" method="post">

    姓名:<input name="username" type="text"><br>
    年龄:<input name="age" type="text"><br>
    生日:<input type="text" name="birthday">
    <input value="提交" type="submit">
</form>

  控制器代码:  

    /**
     * 自定义格式转换器
     * @return
     */
    @RequestMapping(value = "/saveUser")
    public String saveUser(User user){
        System.out.println(user);
        return "success";
    }

  运行结果:

 

 


 

SpringMVC项目搭建

github:https://github.com/PopsiCola/SSM-SpringMVC/tree/springmvc_response

转载于:https://www.cnblogs.com/liulebin/p/11380953.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值