SpringBoot 表单提交全局日期格式转换器实现方式
参考资料
SpringBoot–LocalDateTime格式转换(前端入参)
SpringBoot @InitBinder注解绑定请求参数
分析
⏹当前台的提交数据的Content-Type
为以下情况
application/x-www-form-urlencoded
: 表单提交。multipart/form-data
: 二进制流提交,多用于上传文件。
的时候,使用此转换方式。
⏹ 会用到全局日期转换工具类DateUtil.formatDateStrToDateAllFormat()
,详情可以参考 SpringBoot JSON全局日期格式转换器
一. 实现Converter<S, T>接口的方式
实现Spring
的Converter
接口,指定将String
转换为Date
import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; import java.util.Date; @Component public class GlobalFormStrToDateConvert implements Converter<String, Date> { @Override public Date convert(String dateStr) { try { return DateUtil.formatDateStrToDateAllFormat(dateStr); } catch (Exception e) { return null; } } }
二. 全局@ControllerAdvice + @InitBinder注解的方式
@ControllerAdvice
注解会拦截所有controller
请求,配合@InitBinder
注解,在参数封装到实体类之前将String日期
转换为Date日期
。
import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.InitBinder; import java.beans.PropertyEditorSupport; import java.util.Date; @ControllerAdvice public class GlobalFormStrToDateConvert { @InitBinder protected void dateStrToDate(WebDataBinder binder) { binder.registerCustomEditor(Date.class, new PropertyEditorSupport() { @Override public void setAsText(String dateStr) throws IllegalArgumentException { Date date = DateUtil.formatDateStrToDateAllFormat(dateStr); setValue(date); } }); } }
三. RequestMappingHandlerAdapter的方式
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.bind.support.WebBindingInitializer; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import java.beans.PropertyEditorSupport; import java.util.Date; @Configuration public class GlobalFormStrToDateConvert { @Bean public RequestMappingHandlerAdapter webBindingInitializer(RequestMappingHandlerAdapter requestMappingHandlerAdapter) { // 通过lombda表达式创建WebBindingInitializer对象 WebBindingInitializer webBindingInitializer = binder -> binder.registerCustomEditor(Date.class, new PropertyEditorSupport() { @Override public void setAsText(String dateStr) { Date date = DateUtil.formatDateStrToDateAllFormat(dateStr); setValue(date); } }); requestMappingHandlerAdapter.setWebBindingInitializer(webBindingInitializer); return requestMappingHandlerAdapter; } }
四. 效果
⏹前台JS
const jsonData = { // 👉待处理的日期字符串数据 birthday: '20210105', nameAA: 'jiafeitian', hobby: '吃饭' }; $.ajax({ url: '后台url', type: 'POST', // 对象转换为json字符串 data: jsonData, // 指定为表单提交 contentType: "application/x-www-form-urlencoded", success: function (data, status, xhr) { console.log(data); } });
⏹后台Form
import lombok.Data; import java.util.Date; @Data public class Test15Form { private String name; private String hobby; private String address; // 用来接收的Date类型的数据 private Date birthday; }
👇可以看到前台提交的日期字符串被转换为Date格式了
到此这篇关于SpringBoot 表单提交全局日期格式转换器的文章就介绍到这了,更多相关SpringBoot 全局日期格式转换器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
PowerJob的DispatchStrategy方法工作流程源码解读
这篇文章主要为大家介绍了PowerJob的DispatchStrategy方法工作流程源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2024-01-01springboot+mybatis-plus实现自动建表的示例
本文主要介绍了springboot+mybatis-plus实现自动建表的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-06-06SpringBoot框架集成ElasticSearch实现过程示例详解
这篇文章主要为大家介绍了SpringBoot如何集成ElasticSearch的实现过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步2021-11-11
最新评论