问题复现
在java8中使用3.4.5以上的版本的mybatis时,如果碰到localdatetime类型时会出现异常
解决方法
1、导入依赖 jackson-datatype-jsr310
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.10.3</version>
</dependency>
2、创建 CustomLocalDateTimeSerializer 和 CustomObjectMapper
package com.imooc.reader.config;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
public class CustomLocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
@Override
public void serialize(LocalDateTime dateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
long time = dateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
jsonGenerator.writeNumber(time);
}
}
package com.imooc.reader.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.PackageVersion;
import java.time.LocalDateTime;
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper(){
this.registerModule(new JavaTimeModule());
}
public class JavaTimeModule extends SimpleModule{
public JavaTimeModule(){
super(PackageVersion.VERSION);
this.addSerializer(LocalDateTime.class,new CustomLocalDateTimeSerializer());
}
}
}
3、配置applicationContext.xml
<mvc:annotation-driven>
<!--解决请求响应中文乱码-->
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.imooc.reader.config.CustomObjectMapper"/>
</property>
</bean>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=utf-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>