springboot~统一处理日期请求参数java.utils.Date和java.time.LocalDate

这篇具有很好参考价值的文章主要介绍了springboot~统一处理日期请求参数java.utils.Date和java.time.LocalDate。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

日期类型的参数在从前端通过url参数传递到后端时,它会被进行格式化,如果格式化失败会出现400的错误,像日期格式默认会使用yyyy/MM/dd的格式,如果希望自己去个性化配置,我们可以通过实现WebMvcConfigurer接口的addFormatters方法来完成。文章来源地址https://www.toymoban.com/news/detail-458337.html

java.time.LocalDate统一处理

  • DateTimeFormatterRegistrar实例的setTimeFormattersetDateFormattersetDateTimeFormatter可以很方便的指定LocalDate这些类型的格式
  • 通过定义DateFormatter对象,可以声明java.util.Date类型的格式,但默认的,你只能定义一个java.util.Date对应的格式,多个的话,被会覆盖
  • 通过实现org.springframework.format.Formatter<Date>接口,来定义多个java.util.Date对应的格式,它可以进行遍历,并进行最优的格式匹配

代码的实现

/**
 * WebMvc配置.
 * @author lind
 * @date 2023/5/24 23:46
 * @since 1.0.0
 */
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

	/**
	 * 增加GET请求参数中时间类型转换,注意是LocalTime,LocalDate和LocalDateTime,因为你配置的是DateTimeFormatter.
	 * <ul>
	 * <li>HH:mm:ss -> LocalTime</li>
	 * <li>yyyy-MM-dd -> LocalDate</li>
	 * <li>yyyy-MM-dd HH:mm:ss -> LocalDateTime</li>
	 * </ul>
	 * @param registry
	 */
	@Override
	public void addFormatters(FormatterRegistry registry) {
		DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
		// LocalDate,LocalTime,LocalDateTime格式化
		registrar.setTimeFormatter(DatePattern.NORM_TIME_FORMATTER);
		registrar.setDateFormatter(DatePattern.NORM_DATE_FORMATTER);
		registrar.setDateTimeFormatter(DatePattern.NORM_DATETIME_FORMATTER);
		registrar.registerFormatters(registry);
		// java.util.Date日期格式化
		registry.addFormatter(new CompositeFormatter());
	}

	/**
	 * java.util.Date日期格式化.
	 */
	private static class CompositeFormatter implements Formatter<Date> {

		private final List<Formatter<Date>> formatters = Arrays.asList(new DateFormatter("yyyy-MM-dd HH:mm:ss"),
				new DateFormatter("yyyy-MM-dd"), new DateFormatter("HH:mm:ss"));

		@Override
		public Date parse(String text, Locale locale) throws ParseException {
			for (Formatter<Date> formatter : formatters) {
				try {
					return formatter.parse(text, locale);
				}
				catch (ParseException ignored) {
				}
			}
			throw new ParseException("Unable to parse date: " + text, 0);
		}

		@Override
		public String print(Date date, Locale locale) {
			return formatters.get(0).print(date, locale);
		}

	}

}

测试代码与截图

  • 代码
    @GetMapping("print")
	public ResponseEntity print(@RequestParam LocalDateTime date, @RequestParam Date simple) {
		Map<String, Object> result = new HashMap<>();
		result.put("time", date);
		result.put("simple", simple);
		return ResponseEntity.ok(result);
	}
  • 调用和结果
    springboot~统一处理日期请求参数java.utils.Date和java.time.LocalDate

到了这里,关于springboot~统一处理日期请求参数java.utils.Date和java.time.LocalDate的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包