无法序列化 LOCALDATE 的执行上下文

问题描述 投票:0回答:1

当我在服务中调用并使用它时,出现以下错误。我尝试了很多东西但无法弄清楚。

实体类

@Entity
public class User{
@Column(name = "FIRSTDATE")
@Temporal(TemporalType.DATE)
private Date firstDate;
}

D去上课

@Data
public class UserDto {
   private LocalDate firstDate;
}

dto Mapper 类

UserDto dto = new UserDto();
dto.setFirstDate(DateUtil.convertToLocalDate(entity.getFirstDate()));

convertToLocalDate 方法

public static LocalDate convertToLocalDate(Date dateToConvert) {
        return dateToConvert == null ? null : Instant.ofEpochMilli(dateToConvert.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
    }

当我在服务中调用并使用它时,出现以下错误。我尝试了很多东西但无法弄清楚。

java.lang.IllegalArgumentException: Could not serialize the execution context
    at org.springframework.batch.core.repository.dao.JdbcExecutionContextDao.serializeContext(JdbcExecutionContextDao.java:306) ~[spring-batch-core-4.3.7.jar:4.3.7]
    at org.springframework.batch.core.repository.dao.JdbcExecutionContextDao.updateExecutionContext(JdbcExecutionContextDao.java:146) ~[spring-batch-core-4.3.7.jar:4.3.7]
    at org.springframework.batch.core.repository.support.SimpleJobRepository.updateExecutionContext(SimpleJobRepository.java:223) ~[spring-batch-core-4.3.7.jar:4.3.7]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
    at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.3.23.jar:5.3.23]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[spring-aop-5.3.23.jar:5.3.23]
....
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDate` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: java.util.HashMap["userDtoList"]->java.util.ArrayList[0]->com.example.batch.data.dto.UserDto["firstDate"])
    at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.13.4.jar:2.13.4]
    at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1300) ~[jackson-databind-2.13.4.jar:2.13.4]
    at com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer.serialize(UnsupportedTypeSerializer.java:35) ~[jackson-databind-2.13.4.jar:2.13.4]

第一个日期值:

2023-05-15

我添加了这个依赖项

com.fasterxml.jackson.datatype:jackson-datatype-jsr310
。我无法解决这个问题。 我该如何解决这个问题?

java spring-boot spring-batch
1个回答
0
投票

使用 Spring Batch 4.3,您需要添加

jackson-datatype-jsr310
依赖项并使用
JavaTimeModule()
中的
Jackson2ExecutionContextStringSerializer
配置对象映射器。

版本 5.1 中将添加对 Java 日期和时间 API 类型的支持,请参阅 https://github.com/spring-projects/spring-batch/issues/3952

© www.soinside.com 2019 - 2024. All rights reserved.