springMVC中自定义控制器日期转换

一、导入依赖


<!--java Web工程要记得打成war包-->
<packaging>war</packaging>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
    </dependencies>
    

二、工具类

package com.ceshi.util;

import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 自定义转换器
 *  实现一个接口 converter
 */
public class DateConverter implements Converter<String,Date>{
    public Date convert(String s) {
        Date date = null;
        try {
            new SimpleDateFormat("yyyy-MM-dd").parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}

三、配置文件

springMVC.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--开启注解扫描-->
    <context:component-scan base-package="com.ceshi.controller"/>

    <!--视觉解析器-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--处理器适配器  处理器映射器-->
    <mvc:annotation-driven conversion-service="conversionService2"/>

    <!-- 把我们自定义的类型转换器 注册到  类型转换器工厂中   类型转换器工厂告知 适配器 -->
    <bean id="conversionService2" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.ceshi.util.DateConverter"></bean>
            </set>
        </property>
    </bean>
</beans>

web.xml

<!--编码过滤器-->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
   <!--前端控制器-->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>
           <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

四、controller层

package com.ceshi.controller;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.Date;

@Controller
@RequestMapping("/hello")
public class HelloController {

    @RequestMapping("/sayHello")
    public ModelAndView sayHello(ModelAndView modelAndView,String name){
        //设置模型
        modelAndView.addObject("msg","sayHello"+name);
        //设置视图路径
        modelAndView.setViewName("result");
        return modelAndView;
    }
    
    @RequestMapping("/sayHi")
    public ModelAndView sayHi(ModelAndView modelAndView, @DateTimeFormat(pattern = "yyyy-MM-dd") Date date){
        //设置模型
        modelAndView.addObject("msg","sayHello"+date);
        //设置视图路径
        modelAndView.setViewName("result");
        return modelAndView;
    }
    
    @RequestMapping("/sayHe")
    public ModelAndView sayHe(ModelAndView modelAndView,Date date){
        //设置模型
        modelAndView.addObject("msg","sayHello"+date);
        //设置视图路径
        modelAndView.setViewName("result");
        return modelAndView;
    }
    
    /**
     *   ------------------控制器的另外写法--------------
     *
     * model and view
     *    model 数据模型 ---Model/ModelMap
     *    view  视图地址  --- String
     * @param model
     * @return  返回值就是路径
     */
    @RequestMapping("/sayModel")
    public String sayModel(Model model){
        //设置模型
       model.addAttribute("msg","使用model封装数据,使用字符串进行视图路径的返回。返回的数据是给jsp的");
        //设置视图路径
        return "result";
    }
    
    @RequestMapping("/sayModelMap")
    public String sayModelMap(ModelMap modelMap){
        //设置模型
        modelMap.addAttribute("msg","使用modelMap封装数据,使用字符串进行视图路径的返回。返回的数据是给jsp的");
        modelMap.get("msg");
        //设置视图路径
        return "result";
    }
    
    /**
     * 重定向   请求转发
     */
    @RequestMapping("/sayRedirect")
    public String sayRedirect(Model model){
        //设置模型
        model.addAttribute("msg","完成重定向操作?");
        // 通过response对象做
        //设置  视图路径 完成重定向操作 ,重定向操作不会使用视图解析器
        return "redirect:/pages/result.jsp";
    }
    
    @RequestMapping("/sayForward")
    public String sayForward(Model model){
        //设置模型
        model.addAttribute("msg","完成请求转发操作?");
        // 通过response对象做
        //设置  视图路径 完成请求转发操作 ,请求转发操作不会使用视图解析器
        return "forward:/pages/result.jsp";
    }
}

五、web资源

1、index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>SpringMVC</title>
</head>
<body>
  <br>
    <a href="/hello/sayHi.do?date=1999-01-01">接收日期字符串</a>
    <br>
    <a href="/hello/sayHe.do?date=1999-01-01">接收日期字符串</a>
    <h3>返回页面是jsp形式的 另外的一种 处理器写法</h3>
    <a href="/hello/sayModel.do">我们使用model作为参数用于存储数据,使用String作为返回值,表示视图的地址。</a>
    <br>
    <a href="/hello/sayModelMap.do">我们使用modelMap作为参数用于存储数据,使用String作为返回值,表示视图的地址。</a>
    <h2>返回页面是jsp的情况,我们的处理器中如何进行重定向和请求转发</h2>
     <!--
        重定向请求转发 区别
            重定向 是服务器外部行为,是浏览器发起的操作。 可以从地址栏体现,地址栏改变了。
            请求转发 是服务器内部行为,是服务器发起的操作。地址无法体现,地址栏不变。表示是用一个请求过程中数据需要传递。
                    servlet--jsp传数据。
     -->
    <a href="/hello/sayRedirect.do">重定向</a>
    <a href="/hello/sayForward.do">请求转发</a>
</body>
</html>

2、展示结果页面…result.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>展示结果页面</title>
</head>
<body>
   ${msg}
</body>
</html>
上一篇:LXD 2.0 系列(六):远程主机及容器迁移


下一篇:SpringMVC框架(1)