Json 解析错误 - MismatchedInputException 期望 Spring 引导中的 LocalDate 数组或字符串
Json Parse Error - MismatchedInputException expecting array or string for LocalDate in Spring Boot
我有 2 个通过 REST 调用进行通信的微服务。
我有一个名为 Consumer 的实体,它具有各种字段,包括 LocalDate。
当我通过 REST 调用传递该实体时,出现以下异常
Json parse error expected array or string.,nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException
在实体class中,我注释如下
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate dateOfBirth
在 application.properties 中,我添加了以下行,
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
我正在使用 Spring 引导版本 2.1.2.RELEASE。
在 pom.xml 中,我有 jackson 依赖项。
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
我按照这个 link 实施了,
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,"month":3,"day":10}
应该是,
"dateOfBirth":"1991-03-10"
不是吗??
SpringBoot main class中定义的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"])
因为我在使用 Retrofit,
向我的 GsonBuilder 添加了一个 registerTypeAdapter,如下所示,
gsonBuilder.registerTypeAdapter(LocalDate.class, new LocalDateSerializer());
gsonBuilder.registerTypeAdapter(LocalDate.class, new LocalDateDeserializer());
我有 2 个通过 REST 调用进行通信的微服务。 我有一个名为 Consumer 的实体,它具有各种字段,包括 LocalDate。 当我通过 REST 调用传递该实体时,出现以下异常
Json parse error expected array or string.,nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException
在实体class中,我注释如下
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate dateOfBirth
在 application.properties 中,我添加了以下行,
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
我正在使用 Spring 引导版本 2.1.2.RELEASE。 在 pom.xml 中,我有 jackson 依赖项。
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 我按照这个 link 实施了, 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,"month":3,"day":10}
应该是,
"dateOfBirth":"1991-03-10"
不是吗??
SpringBoot main class中定义的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"])
因为我在使用 Retrofit,
向我的 GsonBuilder 添加了一个 registerTypeAdapter,如下所示,
gsonBuilder.registerTypeAdapter(LocalDate.class, new LocalDateSerializer());
gsonBuilder.registerTypeAdapter(LocalDate.class, new LocalDateDeserializer());