LocalDateTime格式日期以及返回此格式给前台展示问题
目录
java 8出的localDateTime着实好用,但是Spring并不支持这个格式的接收与展示,鄙人也是碰到这个问题,所以做个记录。新手上路,有不当的地方还望大家指出,必会虚心接受。
SpringBoot框架下
后端如何接收LocalDateTime类型的数据,使用转换器即可
@Slf4j
public class DateConverter implements Converter<String, LocalDateTime> {
@Override
public LocalDateTime convert(String s) {
if (s==null || "".equals(s)){
return null;
}
try {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
try {
ZoneId zoneId = ZoneId.systemDefault();
//String转成Date类型
Date date = sdf1.parse(s);
Instant instant = date.toInstant();
return instant.atZone(zoneId).toLocalDateTime();
} catch (ParseException e) {
e.printStackTrace();
throw new RuntimeException("转换日期格式时发生错误");
}
}catch (RuntimeException e){
throw new RuntimeException("转换日期格式时发生错误");
}
}
}
这里的Converter是org.springframework.core.convert.converter这个包下的,可别导错了,try里面就是String转成LocalDateTime的方法,大家需要怎么转都行,可以按需修改。
然后添加这个转换器就可以了
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 添加转换器
*
* @param registry
*/
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new DateConverter());
}
}
到这里就可以了。这样后端就能接收LocalDateTime了
前台展示问题
如果你的前台展示日期出现这种这情况说明一个问题你在上面的添加转换器的地方并不是实现了WebMvcConfigurer这个方法而是继承了WebMvcConfigurationSupport这个方法,后者会导致日期转换失效。
这种把WebMvcConfigurationSupport换成WebMvcConfigurer就行了,如果实在是不想换,也很简单导依赖
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.9.8</version>
</dependency>
然后在你需要返回的LocalDateTime上添加以下注解即可
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
当然这里的pattern也是可以变的按需修改即可。
至此就已经结束了,感谢大家的观看,不足之处望海涵。