SpringMVC日期处理(二)

本文介绍如何在Spring项目中自定义日期格式,包括创建日期格式类、配置Web构造器及在视图层调用自定义格式,确保日期显示符合不同地区的标准。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上面的例子中,我们运行时,将会看到的是页面是报错的。为了查看详细的信息,我们可以在application.properties中添加logging.level.org.springframework.web=DEBUG这一行的代码。这个时候我们运行时,看到的debug的信息如下:


对于为什么会这样,我们有必要去看一下Spring中的DateTimeFormatterRegistrar的类。在这个类中,你会看到,这里配置了解析和打印JRS310。也就是说,这里规定的日期的格式,在美国所用的格式是MM/dd/yy,而在其它地方用的是dd/MM/yy的格式。所以我们需要在Spring启动时,将自己用到的格式预置好。

1.创建日期格式

你们在项目下创建 一个包,包的名字叫date,同时日期需要转换的类叫USLocationDateFormatter.

package masterSpringMVC.date;

import org.springframework.format.Formatter;

import java.text.ParseException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

/**
 * 根据本地的国家,判断用什么样的日期
 * Created by OwenWilliam on 2016/5/15.
 */
public class USLocalDateFormatter implements Formatter<LocalDate> {
    /**美国的日期格式*/
    public static final String US_PATTERN = "MM/dd/yyyy";
    /**其它国家的日期格式*/
    public static final String NORMAL_PATTERN = "dd/MM/yyyy";

    /**
     * 语法上的解析
     * @param text
     * @param locale
     * @return
     * @throws ParseException
     */
    @Override
    public LocalDate parse(String text, Locale locale) throws ParseException {
        return LocalDate.parse(text, DateTimeFormatter.ofPattern(getPattern(locale)));
    }

    /**
     * 将locale转换为String
     * @param object
     * @param locale
     * @return
     */
    @Override
    public String print(LocalDate object, Locale locale) {
        return DateTimeFormatter.ofPattern(getPattern(locale)).format(object);
    }

    /**
     * 判断本地是美国,还是其它国家
     * @param locale
     * @return
     */
    public static String getPattern(Locale locale)
    {
        return isUnitedStates(locale) ? US_PATTERN : NORMAL_PATTERN;
    }

    /**
     * 是否是美国
     * @param locale
     * @return
     */
    private  static boolean isUnitedStates(Locale locale)
    {
        return Locale.US.getCountry().equals(locale.getCountry());
    }
}

2.创建WEB的构造器

同样我们在项目下创建一个config的包,同时创建 一个WebConfiguration的类。这个类将会继承WebMvcConfigurerAdapter, Spring要构造会以我们的日期格式来构造的。

package masterSpringMvc.config;
import masterSpringMvc.dates.USLocalDateFormatter;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.
WebMvcConfigurerAdapter;
import java.time.LocalDate;
@Configuration
public class WebConfiguration extends WebMvcConfigurerAdapter {
@Override public void addFormatters(FormatterRegistry registry) {
registry.addFormatterForFieldType(LocalDate.class, new
USLocalDateFormatter());
}
}

3.调用自定义日期格式

1)        首先我们需要在ProfileController添加加下面的代码。

@ModelAttribute("dateFormat")
public String localeFormat(Locale locale) {
return USLocalDateFormatter.getPattern(locale);
}

上面代码的@ModelAttribute的注解,有点像我们之前用过的model.addAttribute(),也就是默认取值给视图层。

2)        在视图层中我们添加下面的代码。

<div class="row">
<div class="input-field col s6">
<input th:field="${profileForm.birthDate}" id="birthDate"
type="text" th:placeholder="${dateFormat}"/>
<label for="birthDate">Birth Date</label>
</div>
</div>

4.总结

这一节我们主要是学习了如何进行日期格式的转换,添加了上面的代码后,如果你是在美国地区,那么将会看到的结果是:


但是这里我们还有问题,那就是客户端输入信息时,我们需要做信息止的校验,那么这个应该实现,在下一节中,我们将会讲解。


源码路径:git@github.com:owenwilliam/masterSpringMVC.git






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.csdn.net/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、付费专栏及课程。

余额充值