热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spring中Date处理

问题描述java中的date类型在接收前台传入的参数时报400错误。时间格式为“yyyy-MM-ddHH:mm:ss。问题分析由于前端传入的参数默认为String,然后与后台

问题描述

java中的date类型 在接收前台传入的参数时报400错误。时间格式为“yyyy-MM-dd HH:mm:ss"。




问题分析

由于前端传入的参数默认为String,然后与后台接收的参数不匹配,所以浏览器报400错误。




解决方案


  • 通过String 变量来接收字符串,然后通过时间转换类DateFormatter进行转换后,得到Date对象。

@Controller
public class TestController(){public void test(String dateString){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = sdf.parse(dateString); //转换为date}
}

  • 在controller中绑定一个时间转换方法

@Controller
public class TestController{@InitBinderpublic void intDate(WebDataBinder dataBinder){dataBinder.addCustomFormatter(new DateFormatter("yyyy-MM-dd HH:mm:ss"));}public void test(Date date){……}
}

这样在整个controller中的所有方法在接收date类型的字符串时,都会自动转换为Date对象。为了方便使用,可以写一个基础的controller作为父类,将绑定的方法写父controller中,如:

public class BaseController{@InitBinderpublic void intDate(WebDataBinder dataBinder){dataBinder.addCustomFormatter(new DateFormatter("yyyy-MM-dd HH:mm:ss"));}
}@Controller
public class TestController extends BaseController{public void test(Date date){……}
}

Date返回


  • 将Date对象返回前台时,需要先转化为json字符串,然后提供给前台。否则会报undefined的错误。
  • 解决方案
    在将对象转化为json对象的时候,提供时间转化的格式配置。

// 使用方式
Class Test (){private static JsonConfig jsonConfig = new JsonConfig();static {jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());}} public String test(){return JSONObject.fromObject(new Date(), jsonConfig).toString();}
}
// 工具类public class JsonDateValueProcessor implements JsonValueProcessor {private String format = "yyyy-MM-dd hh:mm:ss";public JsonDateValueProcessor() {super();}public JsonDateValueProcessor(String format) {super();this.format = format;}@Overridepublic Object processArrayValue(Object paramObject,JsonConfig paramJsonConfig) {return process(paramObject);}@Overridepublic Object processObjectValue(String paramString, Object paramObject,JsonConfig paramJsonConfig) {return process(paramObject);}private Object process(Object value) {if (value instanceof Date) {SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.CHINA);return sdf.format(value);}return value == null ? "" : value.toString();}
}



Springboot(2019-04-04)

相比之前冗余的解决方案,springboot中对时间的处理显得十分简单。通过在实体类上配置注解即可完成对时间的特殊处理。

public class PubHoliday extends BaseEntity{private Integer id;private String holidayName;@JsonFormat(timezone = "GMT+8", pattern = "YYYY-MM-dd")@DateTimeFormat(pattern="yyyy-MM-dd")private Date holidayDate;private Integer dayType;// 0:自动导入,1手工添加private Integer state;
}

@JsonFormat(timezone = “GMT+8”, pattern = “YYYY-MM-dd”) :即返回结果时,时间对象安装此格式转换。
@DateTimeFormat(pattern=“yyyy-MM-dd”) :即接收参数时以此格式接收。


问题

由于需要访问static目录的静态文件配置了拦截器。

@Configuration
@EnableWebMvc
@ComponentScan
public class InterceptorConfiger implements WebMvcConfigurer {private ApplicationContext applicationContext;@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/static/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");registry.addResourceHandler("/templates/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/templates/");registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}@Overridepublic void configureMessageConverters(List> converters) {Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder().indentOutput(true).dateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).modulesToInstall(new ParameterNamesModule()); //JDK8 新特性,可选择多个模块converters.add(new MappingJackson2HttpMessageConverter(builder.build()));}/*** 自动转换时间格式** @param registry date*/@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addFormatter(new DateFormatter("yyyy-MM-dd HH:mm:ss"));}
}

增加此配置后,实体类上的注解将会失效。所以时间格式以这里配置的为准。


推荐阅读
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • 本文探讨了在Java多线程环境下,如何确保具有相同key值的线程能够互斥执行并按顺序输出结果。通过优化代码结构和使用线程安全的数据结构,我们解决了线程同步问题,并实现了预期的并发行为。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本文详细介绍如何在VSCode中配置自定义代码片段,使其具备与IDEA相似的代码生成快捷键功能。通过具体的Java和HTML代码片段示例,展示配置步骤及效果。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • 本文详细介绍了 org.apache.commons.io.IOCase 类中的 checkCompareTo() 方法,通过多个代码示例展示其在不同场景下的使用方法。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 本文介绍如何在Spring Boot项目中集成Redis,并通过具体案例展示其配置和使用方法。包括添加依赖、配置连接信息、自定义序列化方式以及实现仓储接口。 ... [详细]
  • Spring Boot单元测试中Redis连接失败的解决方案
    本文探讨了在Spring Boot项目中进行单元测试时遇到Redis连接问题的原因及解决方法,详细分析了配置文件加载路径不当导致的问题,并提供了有效的解决方案。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • 数组元素逆序排列的实现
    本文介绍了一种简单有效的方法,用于将整数数组中的元素进行逆序排列。通过折半交换对应位置的元素,可以高效地完成这一任务。 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
author-avatar
怎么找个名字这么费劲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有