问题描述
我有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());