自定义类转换器

自定义类转换器

  1. 表单提交的任何数据类型全部都是字符串类型,但是后台定义Integer类型,数据也可以封装上,说明Spring框架内部会默认进行数据类型转换。
  2. 如果想自定义数据类型转换,可以实现Converter的接口
    步骤如下:
    1).创建用户的实体类代码如下:
package com.txw.domain;

import lombok.Data;
import lombok.ToString;
import java.io.Serializable;
import java.util.Date;
/**
 * 用户的实体类
 * @author Adair
 */
@Data         // 自动生成set和get方法
@ToString     // 重写toString方法
@SuppressWarnings("all")           // 注解警告信息
public class User  implements Serializable {
    
    
    private String uname;      // 用户的姓名
    private  Integer age;      // 用户的年龄
    private Date date;     // 日期
}

2).在pom.xml的代码如下:

<%--
  Created by IntelliJ IDEA.
  User: AdAir
  Date: 2020/7/1 0001
  Time: 9:40
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>请求参数绑定</title>
</head>
<body>
    <%--自定义类型转换器 --%>
       <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>
</body>
</html>

3).创建请求参数绑定的处理类代码如下:

package com.txw.controller;

import com.txw.domain.Account;
import com.txw.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 *请求参数绑定的处理类
 * @author Adair
 */
@Controller
@RequestMapping(value = "/param")
@SuppressWarnings("all")           // 注解警告信息
public class ParamController {
    
    
    /**
     * 自定义类型转换器
     * @param user
     * @return
     */
    @RequestMapping("/saveUser")
    public String saveUser(User user){
    
    
        System.out.println("执行了...");
        System.out.println(user);
        return "success";
    }
}

4).使用TomCat运行结果如图:
在这里插入图片描述

5).通过浏览器访问http://localhost:8080/params.jsp结果如图所示:在这里插入图片描述

6).填写如图所示相应的信息,并点击提交。
在这里插入图片描述
7).会跳转到如图所示的界面:在这里插入图片描述

8).控制台打印结果如图所示:在这里插入图片描述
注意如果使用2020-02-26格式的话,点击提交会出现如图所示的错误:
在这里插入图片描述在这里插入图片描述
并且saveUser()方法没有执行。
3.自定义类型转换器代码编写
1).创建把字符串转换日期的代码如下:

package com.txw.ultis;

import org.springframework.core.convert.converter.Converter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 把字符串转换日期
 * @author Adair
 */
@SuppressWarnings("all")           // 注解警告信息
public class StringToDateConverter implements Converter<String,Date>{
    
    
    /**
     * String source    传入进来字符串
     * @param source
     * @return
     */
    @Override
    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("数据类型转换出现错误");
        }
    }
}

2).在springmvc.xml配置类型转换器的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 开启注解扫描 -->
    <context:component-scan base-package="com.txw"/>
    <!-- 视图解析器对象 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--文件所在的目录-->
        <property name="prefix" value="/WEB-INF/pages/"/>
        <!--文件的后缀名-->
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--配置自定义类型转换器-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.txw.ultis.StringToDateConverter"/>
            </set>
        </property>
    </bean>
    <!-- 开启SpringMVC框架注解的支持 -->
    <mvc:annotation-driven conversion-service="conversionService"/>
</beans>

3). 使用TomCat运行结果如图:
在这里插入图片描述
4).通过浏览器访问http://localhost:8080/params.jsp结果如图所示:在这里插入图片描述
5).填写如图所示相应的信息,并点击提交。
在这里插入图片描述
6).提交会跳转到如图所示的界面:
在这里插入图片描述
7).控制台打印结果如图所示:在这里插入图片描述
4. 在控制器中使用原生的ServletAPI对象。
只需要在控制器的方法参数定义HttpServletRequest和HttpServletResponse对象。
1).在params.Xml的代码如下:

<%--
  Created by IntelliJ IDEA.
  User: AdAir
  Date: 2020/7/1 0001
  Time: 9:40
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>请求参数绑定</title>
</head>
<body>
    <a href="param/testServlet">Servlet原生的API</a>
</body>
</html>

2).创建请求参数绑定的处理类的代码如下:

package com.txw.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 *请求参数绑定的处理类
 * @author Adair
 */
@Controller
@RequestMapping(value = "/param")
@SuppressWarnings("all")           // 注解警告信息
public class ParamController {
    
    
    /**
     * 原生的API
     * @return
     */
    @RequestMapping("/testServlet")
    public String testServlet(HttpServletRequest request, HttpServletResponse response){
    
    
        System.out.println("执行了...");
        System.out.println(request);
        HttpSession session = request.getSession();
        System.out.println(session);
        ServletContext servletContext = session.getServletContext();
        System.out.println(servletContext);
        System.out.println(response);
        return "success";
    }
}

3).使用TomCat运行结果如图:
在这里插入图片描述

4).通过浏览器访问http://localhost:8080/params.jsp结果如图所示:在这里插入图片描述
5).如图所示,并点击Servlet原生的API.会跳转到如图所示的界面:
在这里插入图片描述
6).控制台打印结果如图所示:在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40055163/article/details/109215854
今日推荐