Json解析错误-MismatchedInputException期望在Spring Boot中使用LocalDate的数组或字符串

问题描述

我有2个通过REST调用进行通信的微服务。 我有一个名为Consumer的实体,它具有多个字段,包括LocalDate。 当我通过REST调用传递此实体时,出现以下异常

Json parse error expected array or string.,nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException

在Entity类中,我的注释如下所示

@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate dateOfBirth

在application.properties中,我添加了以下行

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false

我正在使用Spring Boot 2.1.2.RELEASE版本。 在pom.xml中,我有杰克逊依赖项。

I have added jackson-databind and jackson-datatype-jsr310,both versions 2.9.9

我将Retrofit用作第一个微服务的客户端,通过它我对第二个微服务的REST ENDPOINT(@RestController)进行REST调用。

但是我得到了错误-Json解析错误-LocalDate的MismatchedInputException。 我还有什么需要补充的吗?

EDIT-1 以下是生成的JSON的代码段,

{"consumerId":1,"consumerName":"Harry","dateOfBirth":{"year":1991,"month":3,"day":10},"requestDate":"year":2020,"month":8,"day":31}

EDIT-2 我实现了此链接, http://lewandowski.io/2016/02/formatting-java-time-with-spring-boot-using-json/

根据评论,由@rohit附加在下面。

@JsonFormat(pattern="yyyy-MM-dd")
@JsonSerialize(using=LocalDateSerializer.class)
@JsonDeserialize(using=LocalDateDeserializer.class)
private LocalDate dateOfBirth

但是JSON中生成的日期格式仍然没有按照格式更改。

"dateOfBirth":{"year":1991,"day":10}

应该是

"dateOfBirth":"1991-03-10"

不是吗?

是否不使用SpringBoot主类中定义的bean?

@Bean
@Primary
public ObjectMapper serializingObjectMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    JavaTimeModule javaTimeModule = new JavaTimeModule();
    javaTimeModule.addSerializer(LocalDate.class,new LocalDateSerializer());
    javaTimeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer());
    objectMapper.registerModule(javaTimeModule);
    return objectMapper;
}

现在我遇到错误了,

Json parse error: text; nested exception is com.fasterxml.jackson.databind.JsonMappingException: text (through reference chain com.model.Consumer["dateOfBirth"])

解决方法

当我使用翻新时,

如下所示向我的GsonBuilder中添加了一个registerTypeAdapter,

gsonBuilder.registerTypeAdapter(LocalDate.class,new LocalDateSerializer());
gsonBuilder.registerTypeAdapter(LocalDate.class,new LocalDateDeserializer());

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...