环境:
SpringBoot2.0+ jdk1.8
首先是SpringMvc对日期传参返参的处理:
SrpingMvc返回参数及接收参数时时间(LocalDateTime,LocalDate,LocalTime)的处理问题,因在项目中接收和
返回日期参数需要手动转换(有可能客户端传给你的格式还不对),而且很繁琐,以下就是对日期进行统一处理的配置
配置以下日期转换类:注意一定要保证被注入让spring管理
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
@Configuration
public class DateConverterConf{
/**
* 返回json的日期处理
*
* @return
*/
@Bean(name = "objectMapper")
public ObjectMapper getObjectMapper() {
ObjectMapper om = new ObjectMapper();
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
om.registerModule(javaTimeModule);
return om;
}
@Bean
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
return new MappingJackson2HttpMessageConverter(objectMapper);
}
/**
* 接收前端日期的转换处理
*
* @return
*/
@Bean
public Converter<String, LocalDateTime> LocalDateTimeConvert() {
return new Converter<String, LocalDateTime>() {
@Override
public LocalDateTime convert(String source) {
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime date = null;
try {
if (StringUtils.isNotBlank(source)) {
date = LocalDateTime.parse(source, df);
}
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
};
}
@Bean
public Converter<String, LocalDate> LocalDateConvert() {
return new Converter<String, LocalDate>() {
@Override
public LocalDate convert(String source) {
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = null;
try {
if (StringUtils.isNotBlank(source)) {
date = LocalDate.parse(source, df);
}
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
};
}
@Bean
public Converter<String, LocalTime> LocalTimeConvert() {
return new Converter<String, LocalTime>() {
@Override
public LocalTime convert(String source) {
DateTimeFormatter df = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time = null;
try {
if (StringUtils.isNotBlank(source)) {
time = LocalTime.parse(source, df);
}
} catch (Exception e) {
e.printStackTrace();
}
return time;
}
};
}
}
其次处理jpa查询时间的映射问题:
实体类包含LocalDateTime,LocalDate 的时候,需要在启动类添加以下配置:**
启动类:
@EntityScan(basePackages = {"com.xinaml.frame.entity"}, basePackageClasses = Jsr310JpaConverters.class)
public class AppRoot {
public static void main(String[] args) {
SpringApplication.run(AppRoot.class, args);
}
}
注:com.xinaml.frame.entity为实体类所在的包