springmvc--对日期类型如何处理

目录

一、Student类:

二、student.jsp(在webapp下)

三、StudentController类

四、启动tomcat

1.”/”形式

2.“-”形式

3.“\”形式

五、解决

1.第一种方式@DateTimeFormat注解

(1)在实体类的birthday上加@DateTimeFormat注解

(2)同时在spring-mvc.xml里配置spring开启注解mvc的支持

(3)重新启动tomcat

2.第二种方式:用自定义类型转换器

(1)先把Studeunt类birthday上的注解去掉

(2)建一个StringToDate类:

(3)spring-mvc.xml里配置日期类型转换器

(4)重新启动tomcat:

六、怎么让控制台输出的是自己输入的格式?

1.最简单的方式:在输出语句那用SimpleDateFormat对象

StudentController类里:

运行:

控制台:

2.实体类的日期上加两个注解(@DateTimeFormat和@JsonFormat)

(1)使用@JsonFormat注解先导入依赖

(2)实体类:

(3)spring-mvc.xml里配置spring开启注解mvc的支持


一、Student类:

import java.util.Date;


public class Student {

    private String stuName;

    private Integer age;

    private Date birthday;


    public Student() {

    }


    public Student(String stuName, Integer age, Date birthday) {

        this.stuName = stuName;

        this.age = age;

        this.birthday = birthday;

    }


    public String getStuName() {

        return stuName;

    }


    public void setStuName(String stuName) {

        this.stuName = stuName;

    }


    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;

    }


    @Override

    public String toString() {

        return "Student{" +

                "stuName='" + stuName + '\'' +

                ", age=" + age +

                ", birthday=" + birthday +

                '}';

    }

}

二、student.jsp(在webapp下)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>Title</title>

</head>

<body>

<form action="stu/student.do" method="post">

    姓名:<input type="text" name="stuName" /><br/>

    年龄:<input type="text" name="age" /><br/>

    生日:<input type="text" name="birthday" /><br/>

    <input type="submit" value="提交" />

</form>

</body>

</html>

三、StudentController类

import com.qcby.pojo.Student;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;


@Controller

@RequestMapping("/stu")

public class StudentController {

    

    @RequestMapping("/student.do")

    public String studentSave(Student student){

        System.out.println(student);

        return "success";

    }

}

四、启动tomcat

1./形式

2.-形式

3.“\形式

说明它只支持/

五、解决

1.第一种方式@DateTimeFormat注解

(1)在实体类的birthday上加@DateTimeFormat注解

import org.springframework.format.annotation.DateTimeFormat;


import java.util.Date;


public class Student {

    private String stuName;

    private Integer age;


    //这是"-"形式的,想要别的形式就去改

    @DateTimeFormat(pattern = "yyyy-MM-dd") //这里还可以加上时分秒:yyyy-MM-dd HH:mm:ss

    private Date birthday;


    public Student() {

    }


    public Student(String stuName, Integer age, Date birthday) {

        this.stuName = stuName;

        this.age = age;

        this.birthday = birthday;

    }


    public String getStuName() {

        return stuName;

    }


    public void setStuName(String stuName) {

        this.stuName = stuName;

    }


    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;

    }


    @Override

    public String toString() {

        return "Student{" +

                "stuName='" + stuName + '\'' +

                ", age=" + age +

                ", birthday=" + birthday +

                '}';

    }

}

(2)同时在spring-mvc.xml里配置spring开启注解mvc的支持

<!-- 配置spring开启注解mvc的支持-->

<mvc:annotation-driven></mvc:annotation-driven>

(3)重新启动tomcat

2.第二种方式:用自定义类型转换器

(1)先把Studeunt类birthday上的注解去掉

(2)建一个StringToDate类:

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


import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;


public class StringToDate implements Converter<String, Date> {


    @Override

    public Date convert(String s) {

        //判断

        if(s==null){

            throw new RuntimeException("请您输入日期");

        }

        //进行转换

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

        try {

            //进行转换

            return simpleDateFormat.parse(s);

        } catch (ParseException e) {

            throw new RuntimeException(e);

        }

    }

}

(3)spring-mvc.xml里配置日期类型转换器

但是这是自己写的,框架不认识,所以要在spring-mvc.xml里配置:

<!--配置日期类型转换器,类型转换器的组件,把日期类型转换注入到组件对象中-->

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">

    <property name="converters">

        <set>

            <bean class="com.qcby.controller.StringToDate"></bean>

        </set>

    </property>

</bean>

<!--让映射器、适配器和处理器生效(默认不配置也是可以的)-->

<mvc:annotation-driven conversion-service="conversionService"/><!--这个要开启-->

<!-- 配置spring开启注解mvc的支持-->

<!--<mvc:annotation-driven></mvc:annotation-driven>--><!--而且这个要关闭-->

(4)重新启动tomcat:

点提交:

控制台:

六、怎么让控制台输出的是自己输入的格式?

1.最简单的方式:在输出语句那用SimpleDateFormat对象

StudentController类里:

import com.qcby.pojo.Student;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;


import java.text.SimpleDateFormat;


@Controller

@RequestMapping("/stu")

public class StudentController {


    @RequestMapping("/student.do")

    public String studentSave(Student student){

        System.out.println(student);

        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");

        String format = simpleDateFormat.format(student.getBirthday());

        System.out.println(format);

        return "success";

    }

}

运行:

控制台:

但这是手动的,每次都要重新编码,不好

2.实体类的日期上加两个注解(@DateTimeFormat和@JsonFormat)

这样就是接收的时候就以这种方式接收,显示的时候还以这种方式显示,就不用自定义类型转换器了

(1)使用@JsonFormat注解先导入依赖

<dependency>

    <groupId>com.fasterxml.jackson.core</groupId>

    <artifactId>jackson-databind</artifactId>

    <version>2.9.2</version>

</dependency>

(2)实体类:

import com.fasterxml.jackson.annotation.JsonFormat;

import org.springframework.format.annotation.DateTimeFormat;


import java.util.Date;


public class Student {

    private String stuName;

    private Integer age;


    @DateTimeFormat(pattern = "yyyy-MM-dd") //输入

    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")  //显示

    private Date birthday;


    public Student() {

    }


    public Student(String stuName, Integer age, Date birthday) {

        this.stuName = stuName;

        this.age = age;

        this.birthday = birthday;

    }


    public String getStuName() {

        return stuName;

    }


    public void setStuName(String stuName) {

        this.stuName = stuName;

    }


    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;

    }


    @Override

    public String toString() {

        return "Student{" +

                "stuName='" + stuName + '\'' +

                ", age=" + age +

                ", birthday=" + birthday +

                '}';

    }

}

(3)spring-mvc.xml里配置spring开启注解mvc的支持

​<?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">


    <!-- 配置spring创建容器时要扫描的包 -->

    <context:component-scan base-package="com.qcby.controller"></context:component-scan>


    <!-- 配置视图解析器 -->

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="prefix" value="/WEB-INF/pages/"></property>

        <property name="suffix" value=".jsp"></property>

    </bean>

    <!-- 配置spring开启注解mvc的支持-->

    <mvc:annotation-driven></mvc:annotation-driven>

</beans>

​
SpringMVC日期处理提供了多种注解。其中,可以使用@DateTimeFormat注解来指定日期的格式,该注解需要搭配<mvc:annotation-driven>标签在springmvc.xml中使用。这种方式适用于单个日期处理。\[1\] 另外,可以在类中使用@InitBinder注解来注册一个全局的日期处理注解,这样就不需要注册注解驱动。在initBinder方法中,可以使用registerCustomEditor方法来注册自定义的日期类型处理器,例如使用CustomDateEditor来指定日期的格式。这种方式适用于类中全局的日期处理。\[2\] 在前端显示日期时,可以使用JSTL来进行格式化。如果是单个日期对象,可以直接将日期转换为格式化的字符串进行显示。如果是list中的实体类对象的成员变量是日期类型,则需要使用JSTL进行显示。同时,可以在类的成员变量上或者setXXX方法上使用@DateTimeFormat注解来统一处理日期类型。\[2\] 需要注意的是,方法的参数名称要和前端请求中的name中的名字一样,才能正确注入日期。否则,注入为空null。如果使用格式化器,则可能会报500错误,原因是空指针异常。\[3\] #### 引用[.reference_title] - *1* *2* *3* [SpringMVC中的日期处理](https://blog.youkuaiyun.com/qq_36150763/article/details/126008759)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值