org.springframework.dao.InvalidDataAccessApiUsageException: данное строковое значение: [] не может быть преобразовано в Json объект - PullRequest
0 голосов
/ 30 марта 2020

Я получил такую ​​ошибку.

Вложенное исключение: java .lang.IllegalArgumentException: Заданное строковое значение: [{"id": "DFW", "namd": "Dallas , Техас , TX (DAL-Love Field) "," name_kr ":" 댈 라스, 텍사스 (DAL- 러브 필드 공항) "}, {" id ":" RBD "," namd ":" Даллас, TX (RBD-Executive) ) "," name_kr ":" 댈러스, 텍사스 (RBD- 이그제큐티브) "}, {" id ":" ADS "," namd ":" Даллас, TX (ADS-Addison) "," name_kr ":" 댈러스, 텍사스 (ADS- 애디슨 공항) "}] не может быть преобразовано в Json объект

это значение - мой столбец jsonb postgres строки.

и вот моя таблица Пример сущности (связанная проблема).


@Data
@Entity
@Table(name = "expedia_region_union")
@JsonInclude(JsonInclude.Include.NON_NULL)
@TypeDefs({
        @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
})
public class ExpediaRegionUnion {


    @Id
//    @GeneratedValue
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column( columnDefinition = "uuid", updatable = false )
    private String regionId;


    @Type(type = "jsonb")
    @Column(columnDefinition = "airport")
    private HashMap airport;



    @Column(name = "source_time")
    private String sourceTime;

На мой взгляд, карта сущностей, похоже, не обрабатывает поле аэропорта. поле airport является списком типа jsonb. но я создал правило сущности наподобие HashMap.

пример данных

about airport field

[
  {
    "id": "DFW",
    "namd": "Dallas, TX (DFW-Dallas-Fort Worth Intl.)",
    "name_kr": "댈러스, 텍사스 (DFW-댈러스-포트워스 국제공항)"
  },
  {
    "id": "DAL",
    "namd": "Dallas, TX (DAL-Love Field)",
    "name_kr": "댈라스, 텍사스 (DAL-러브필드 공항)"
  },
  {
    "id": "RBD",
    "namd": "Dallas, TX (RBD-Executive)",
    "name_kr": "댈러스, 텍사스 (RBD-이그제큐티브)"
  },
  {
    "id": "ADS",
    "namd": "Dallas, TX (ADS-Addison)",
    "name_kr": "댈러스, 텍사스 (ADS-애디슨 공항)"
  }
]

enter image description here

Как изменить настройки объекта?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020
    @Type(type = "jsonb")
    @Column(columnDefinition = "airport")
    private List airport;

Я решил это так просто, я не знаю, смогу ли я кому-нибудь помочь.

edit -> jsonb в виде списка.

0 голосов
/ 30 марта 2020

Данные образца не соответствуют вашим ожиданиям.

"airport" : "[{\"id\": \"DFW\", \"namd\": \"Dallas, TX (DFW-Dallas-Fort Worth Intl.)\", \"name_kr\": \"댈러스, 텍사스 (DFW-댈러스-포트워스 국제공항)\"}, ...]"

- это не массив, а строка, показанная в кавычках вокруг значения. Допустимый массив JSON будет выглядеть как

"airport" : [{"id": "DFW", "namd": "Dallas, TX (DFW-Dallas-Fort Worth Intl.)", "name_kr": "댈러스, 텍사스 (DFW-댈러스-포트워스 국제공항)"}, {"id": "DAL", "namd": "Dallas, TX (DAL-Love Field)", "name_kr": "댈라스, 텍사스 (DAL-러브필드 공항)"}, {"id": "RBD", "namd": "Dallas, TX (RBD-Executive)", "name_kr": "댈러스, 텍사스 (RBD-이그제큐티브)"}, {"id": "ADS", "namd": "Dallas, TX (ADS-Addison)", "name_kr": "댈러스, 텍사스 (ADS-애디슨 공항)"}]
...