三、SpringMVC之参数封装

三、SpringMVC之参数封装

一、基本数据欸型的参数

1.页面传递的参数,都需要配置到方法参数列表上
2.页面传递的参数名称必须要参数列表上的参数名称一致
3对与基本数据类型springMVC框架可以自动转型
4.特殊的类型: 配置类型转化器(将string类型参数转化为date类型)

控制器方法

/**
     * 接收基本数据类型的参数
     * 1页面传递的参数,都需要配置到方法参数列表上
     * 2页面传递的参数名称必须要参数列表上的参数名称一致
     * 
     * 3对与基本数据类型 
     *    springMVC框架可以自动转型
     * 4特殊的类型:
     *      * 配置类型转化器(将string类型参数转化为date类型)
     */
    @RequestMapping(value = "/basic")
    public String delete (String name,Integer age) {
        System.out.println(name +"   ====="+age);
        return "success";
    }


    @RequestMapping("/special")
    public String update(Date date) {
        System.out.println(date);
        return "success";
    }

设置类型转换器:

1.实现Converter接口
2.将自定义类型转化器注册到spring框架中
3.需要将conversionService配置到annotation-driven中

/**
 * 自定义类型转化器
 *      1.实现Converter接口
 *          <S(传递的参数),T(需要转化的对象类型)> 
 *      2.将自定义类型转化器注册到spring框架中
 * 
 *      <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
 *          <!--将类型转化器注册到转化器服务 -->
 *          <property name="converters">
 *              <!--该参数接受的为一个数组-->
 *              <array>
 *                  <!-- 创建自定义类型转换器对象 -->
 *                  <bean class="cn.itcast.converter.StringToDateConverter"></bean>
 *              </array>
 *          </property>
 *      </bean>
 *      3.需要将conversionService配置到annotation-driven中
 *      <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
 *
 */
    public class StringToDateConverter implements Converter<String, Date> {

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

}

二、接受引用类型数据(javaBean对象)

SpringMVC可以将页面传递的数据,自动的封装为一个java对象
1. 需要将对象以参数的形式传递到方法中
2.在页面传递参数的时候,参数名称必须和对象中的属性名称一致(和set方法名后半部分内容一致,底层通过反射set方法赋值)

控制器方法:

/**
     * 接收对象类型的数据
     *      将页面传递的数据,自动的封装为一个java对象
     *  * 1需要将对象以参数的形式传递到方法中
     *  * 2在页面传递参数的时候,参数名称必须和对象中的属性名称一致
     */
    @RequestMapping("/queryUser")
    public String update(User user) {
        System.out.println(user);
        return "success";
    }

请求参数

    <h1>表单2</h1>
    <form method="post" action="${pageContext.request.contextPath}/queryUser">
        姓名:<input name="username" value="zhangsan" />
        <br>
        密码:<input name="password" value="1234" /> 
        <br>
         生日:<input name="birthday"  value="1991-11-11"  /> 
        <br>
         年龄:<input name="age"  value="19" />    
        <input type="submit" value="提交">
    </form>

javaBean

public class User {
    private String username;
    private Integer age;
    private Date birthday;

    private String password;

    public String getUsername() {
        return username;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getPassword() {
        return password;
    }

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

    public User() {
        super();
        // TODO Auto-generated constructor stub
    }

    public User(String username, Integer age, Date birthday, String password) {
        super();
        this.username = username;
        this.age = age;
        this.birthday = birthday;
        this.password = password;
    }

    @Override
    public String toString() {
        return "User [username=" + username + ", age=" + age + ", birthday=" + birthday + ", password=" + password
                + "]";
    }

}

三、list集合、map集合

1.集合必须被封装到一个对象中
2.list请求参数格式为:集合名称[索引].属性 例:users[1].username
map请求参数格式为:集合名称[key].属性 例:userMaps[key1].username
集合名称指的是:集合在封装该集合的javaBean中的属性名对应的set方法后面的名称。

控制器方法

    /**
     * 封装为list或者map集合类型
     *    1.集合必须被封装到一个对象中
     *    2.list请求参数格式为:**集合名称[索引].属性** 例:users[1].username
     *       map请求参数格式为:**集合名称[key].属性** 例:userMaps[key1].username
     *集合名称指的是:集合在封装该集合的javaBean中的属性名对应的set方法后面的名称。** 
     */
    @RequestMapping("/list")
    public String update(QueryVo vo) {
        System.out.println(vo);
        return "success";
    }
    @RequestMapping("/map")
    public String update(QueryVo vo) {
        System.out.println(vo);
        return "success";
    }

请求表单

    </form>
    <h1>测试map的表单</h1>
    <form method="post" action="${pageContext.request.contextPath}/map">

        姓名:<input name="userMaps[key1].username" value="zhangsan" />
        <br>
        密码:<input name="userMaps[key1].password"value="1234" /> 
        <br>
        生日:<input name="userMaps[key1].birthday" value="1991-11-11"  /> 
        <br>
        年龄:<input name="userMaps[key1].age" value="19" /> 
        姓名:<input name="userMaps[key2].username" value="zhangsan" />
        <br>
        密码:<input name="userMaps[key2].password" value="1234" /> 
        <br>
        生日:<input name="userMaps[key2].birthday" value="1991-11-11"  /> 
        <br>
        年龄:<input name="userMaps[key2].age"     value="19" /> 
        <input type="submit" value="提交">
    </form>

    <h1>测试list的表单</h1>
    <form method="post" action="${pageContext.request.contextPath}/list">

        姓名:<input name="users[0].username" value="zhangsan" />
        <br>
        密码:<input name="users[0].password"  value="1234" /> 
        <br>
        生日:<input name="users[0].birthday"  value="1991-11-11"  /> 
        <br>
        年龄:<input name="users[0].age"  value="19" /> 
        姓名:<input name="users[1].username" value="zhangsan" />
        <br>
        密码:<input name="users[1].password"  value="1234" /> 
        <br>
        生日:<input name="users[1].birthday"  value="1991-11-11"  /> 
        <br>
        年龄:<input name="users[1].age"  value="19" /> 
        <input type="submit" value="提交">
    </form>
<br>

封装集合的javaBean

public class QueryVo {

    private List<User> users;
    private Map<String, User> userMaps;

    public QueryVo() {
        super();
        // TODO Auto-generated constructor stub
    }

    public QueryVo(List<User> users, Map<String, User> userMaps) {
        super();
        this.users = users;
        this.userMaps = userMaps;
    }

    public Map<String, User> getUserMaps() {
        return userMaps;
    }

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

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }

    @Override
    public String toString() {
        return "QueryVo [users=" + users + ", userMaps=" + userMaps + "]";
    }

}

四、获取servletApi对象

将需要获取的servletApi对象直接放在方法形参上,及可完成获取
如:request,response,session,cookie ,writer等等

    /**
     * 可以在方法中获取servletApi对象
     *      request,response,session
     * * 只需要将对应的servletApi对象以参数的形式存入方法中就可以
     */

    @RequestMapping("/servletAPI")
    public String servletAPI(HttpServletRequest request ,HttpServletResponse response,HttpSession session) {

        request.setAttribute("rkey", "request");
        session.setAttribute("skey", "session");
        return "success";
    }
    @RequestMapping("/servletCookie")
    public String servletCookie(Cookie cookie) {
        System.out.println(cookie.getValue());
        return "success";
    }

================

一、基本数据欸型的参数

1.页面传递的参数,都需要配置到方法参数列表上
2.页面传递的参数名称必须要参数列表上的参数名称一致
3对与基本数据类型springMVC框架可以自动转型
4.特殊的类型: 配置类型转化器(将string类型参数转化为date类型)

控制器方法

/**
     * 接收基本数据类型的参数
     * 1页面传递的参数,都需要配置到方法参数列表上
     * 2页面传递的参数名称必须要参数列表上的参数名称一致
     * 
     * 3对与基本数据类型 
     *    springMVC框架可以自动转型
     * 4特殊的类型:
     *      * 配置类型转化器(将string类型参数转化为date类型)
     */
    @RequestMapping(value = "/basic")
    public String delete (String name,Integer age) {
        System.out.println(name +"   ====="+age);
        return "success";
    }


    @RequestMapping("/special")
    public String update(Date date) {
        System.out.println(date);
        return "success";
    }

设置类型转换器:

1.实现Converter接口
2.将自定义类型转化器注册到spring框架中
3.需要将conversionService配置到annotation-driven中

/**
 * 自定义类型转化器
 *      1.实现Converter接口
 *          <S(传递的参数),T(需要转化的对象类型)> 
 *      2.将自定义类型转化器注册到spring框架中
 * 
 *      <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
 *          <!--将类型转化器注册到转化器服务 -->
 *          <property name="converters">
 *              <!--该参数接受的为一个数组-->
 *              <array>
 *                  <!-- 创建自定义类型转换器对象 -->
 *                  <bean class="cn.itcast.converter.StringToDateConverter"></bean>
 *              </array>
 *          </property>
 *      </bean>
 *      3.需要将conversionService配置到annotation-driven中
 *      <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
 *
 */
    public class StringToDateConverter implements Converter<String, Date> {

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

}

二、接受引用类型数据(javaBean对象)

SpringMVC可以将页面传递的数据,自动的封装为一个java对象
1. 需要将对象以参数的形式传递到方法中
2.在页面传递参数的时候,参数名称必须和对象中的属性名称一致(和set方法名后半部分内容一致,底层通过反射set方法赋值)

控制器方法:

/**
     * 接收对象类型的数据
     *      将页面传递的数据,自动的封装为一个java对象
     *  * 1需要将对象以参数的形式传递到方法中
     *  * 2在页面传递参数的时候,参数名称必须和对象中的属性名称一致
     */
    @RequestMapping("/queryUser")
    public String update(User user) {
        System.out.println(user);
        return "success";
    }

请求参数

    <h1>表单2</h1>
    <form method="post" action="${pageContext.request.contextPath}/queryUser">
        姓名:<input name="username" value="zhangsan" />
        <br>
        密码:<input name="password" value="1234" /> 
        <br>
         生日:<input name="birthday"  value="1991-11-11"  /> 
        <br>
         年龄:<input name="age"  value="19" />    
        <input type="submit" value="提交">
    </form>

javaBean

public class User {
    private String username;
    private Integer age;
    private Date birthday;

    private String password;

    public String getUsername() {
        return username;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getPassword() {
        return password;
    }

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

    public User() {
        super();
        // TODO Auto-generated constructor stub
    }

    public User(String username, Integer age, Date birthday, String password) {
        super();
        this.username = username;
        this.age = age;
        this.birthday = birthday;
        this.password = password;
    }

    @Override
    public String toString() {
        return "User [username=" + username + ", age=" + age + ", birthday=" + birthday + ", password=" + password
                + "]";
    }

}

三、list集合、map集合

1.集合必须被封装到一个对象中
2.list请求参数格式为:集合名称[索引].属性 例:users[1].username
map请求参数格式为:集合名称[key].属性 例:userMaps[key1].username
集合名称指的是:集合在封装该集合的javaBean中的属性名对应的set方法后面的名称。

控制器方法

    /**
     * 封装为list或者map集合类型
     *    1.集合必须被封装到一个对象中
     *    2.list请求参数格式为:**集合名称[索引].属性** 例:users[1].username
     *       map请求参数格式为:**集合名称[key].属性** 例:userMaps[key1].username
     *集合名称指的是:集合在封装该集合的javaBean中的属性名对应的set方法后面的名称。** 
     */
    @RequestMapping("/list")
    public String update(QueryVo vo) {
        System.out.println(vo);
        return "success";
    }
    @RequestMapping("/map")
    public String update(QueryVo vo) {
        System.out.println(vo);
        return "success";
    }

请求表单

    </form>
    <h1>测试map的表单</h1>
    <form method="post" action="${pageContext.request.contextPath}/map">

        姓名:<input name="userMaps[key1].username" value="zhangsan" />
        <br>
        密码:<input name="userMaps[key1].password"value="1234" /> 
        <br>
        生日:<input name="userMaps[key1].birthday" value="1991-11-11"  /> 
        <br>
        年龄:<input name="userMaps[key1].age" value="19" /> 
        姓名:<input name="userMaps[key2].username" value="zhangsan" />
        <br>
        密码:<input name="userMaps[key2].password" value="1234" /> 
        <br>
        生日:<input name="userMaps[key2].birthday" value="1991-11-11"  /> 
        <br>
        年龄:<input name="userMaps[key2].age"     value="19" /> 
        <input type="submit" value="提交">
    </form>

    <h1>测试list的表单</h1>
    <form method="post" action="${pageContext.request.contextPath}/list">

        姓名:<input name="users[0].username" value="zhangsan" />
        <br>
        密码:<input name="users[0].password"  value="1234" /> 
        <br>
        生日:<input name="users[0].birthday"  value="1991-11-11"  /> 
        <br>
        年龄:<input name="users[0].age"  value="19" /> 
        姓名:<input name="users[1].username" value="zhangsan" />
        <br>
        密码:<input name="users[1].password"  value="1234" /> 
        <br>
        生日:<input name="users[1].birthday"  value="1991-11-11"  /> 
        <br>
        年龄:<input name="users[1].age"  value="19" /> 
        <input type="submit" value="提交">
    </form>
<br>

封装集合的javaBean

public class QueryVo {

    private List<User> users;
    private Map<String, User> userMaps;

    public QueryVo() {
        super();
        // TODO Auto-generated constructor stub
    }

    public QueryVo(List<User> users, Map<String, User> userMaps) {
        super();
        this.users = users;
        this.userMaps = userMaps;
    }

    public Map<String, User> getUserMaps() {
        return userMaps;
    }

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

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }

    @Override
    public String toString() {
        return "QueryVo [users=" + users + ", userMaps=" + userMaps + "]";
    }

}

四、获取servletApi对象

将需要获取的servletApi对象直接放在方法形参上,及可完成获取
如:request,response,session,cookie ,writer等等

    /**
     * 可以在方法中获取servletApi对象
     *      request,response,session
     * * 只需要将对应的servletApi对象以参数的形式存入方法中就可以
     */

    @RequestMapping("/servletAPI")
    public String servletAPI(HttpServletRequest request ,HttpServletResponse response,HttpSession session) {

        request.setAttribute("rkey", "request");
        session.setAttribute("skey", "session");
        return "success";
    }
    @RequestMapping("/servletCookie")
    public String servletCookie(Cookie cookie) {
        System.out.println(cookie.getValue());
        return "success";
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值