#spring-boot #java-8
#весенняя загрузка #java-8
Вопрос:
У меня есть приложение, созданное поверх Spring boot и Java8. Я пытаюсь передать объект LocalDateTime из одного микросервиса в другой. Когда я пытаюсь это сделать, я получаю следующую ошибку.
"JSON parse error: Unexpected token (START_OBJECT), expected VALUE_STRING: Expected array or string.; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (START_OBJECT), expected VALUE_STRING: Expected array or string.n at [Source: java.io.PushbackInputStream@2930ef8b; line: 8, column: 16] (through reference chain:
Я добавил приведенные ниже записи в свое приложение.
spring:
jackson:
serialization:
write-dates-as-timestamps: false
И следующая запись в build.gradle.
compile 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
Кто-нибудь может мне помочь в том, что здесь не так?
POJO выглядит следующим образом.
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private LocalDateTime testDateTime;
JSON выглядит следующим образом.
{ "date_field": "2019-03-27T05:00:00.000Z", }
Комментарии:
1. Ну, и как выглядит JSON?
2. { «date_field»: «2019-03-27T05:00:00.000Z», } @Michael
3. Вы уверены, что оба ваших микросервиса имеют одинаковую конфигурацию (одинаковую зависимость, одинаковое свойство, одинаковое
@JsonFormat
, …)? Вы также, кажется, используетеdate_field
в своем JSON, ноtestDateTime
в вашем POJO, это правильно? Также проверьте, не создаете ли вы где-нибудь пользовательскийObjectMapper
компонент.4.
LocalDateTime
у него никогда не будет часового пояса, проанализируйте его наutil.Date
Ответ №1:
Похоже, что ваша конфигурация неверна. Имя в строке JSON — «date_field», в то время как ваш POJO имеет свойство «testDateTime». Вы должны сделать их конвертируемыми с помощью Jackson. Либо добавьте аннотацию, указывающую, что имя поля «date_field» (используя @JsonProperty), либо измените имя переменной.