【问题标题】:org.springframework.dao.InvalidDataAccessApiUsageException: The given string value: [] cannot be transformed to Json objectorg.springframework.dao.InvalidDataAccessApiUsageException:给定的字符串值:[]无法转换为Json对象
【发布时间】:2020-03-30 10:00:54
【问题描述】:

我遇到了这样的错误。

嵌套异常是 java.lang.IllegalArgumentException: 给定的字符串值: [{"id": "DFW", "namd": "Dallas, TX (DFW-Dallas-Fort Worth Intl.)", "name_kr" : "댈러스, 텍사스 (DFW-댈러스-포트워스 국제공항)"}, {"id": "DAL", "namd": "达拉斯, TX (DAL-Love Field)", "name_kr": "댈라스 , 텍사스 (DAL-러브필드 공항)"}, {"id": "RBD", "namd": "达拉斯, TX (RBD-Executive)", "name_kr": "댈러스, 텍사스 (RBD-이그제큐티브)" }, {"id": "ADS", "namd": "Dallas, TX (ADS-Addison)", "name_kr": "댈러스, 텍사스 (ADS-애디슨 공항)"}] 无法转换为 Json 对象

这个值是我的 postgres 行的 jsonb 列。

这是我的表格实体示例(相关问题)。


@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-애디슨 공항)"
  }
]

如何更改实体设置?

【问题讨论】:

    标签: java postgresql hibernate jpa


    【解决方案1】:

    您的样本数据不符合您的预期。

    "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-애디슨 공항)"}]
    

    【讨论】:

    • 感谢您的回复。但我认为数据没有问题。所以我编辑了我的样本数据。因为当我使用 dbeaver 在 postgres 中看到 airport field 时,我的意思是 jsonb 似乎是正确的类型。它不是字符串类型。如果它是字符串,则 dbeaver 不会折叠。 (你可以看到上面这张图)
    • 我觉得不是因为你说的,而是jpa不起作用,因为jsonb数据是一个数组。
    【解决方案2】:
        @Type(type = "jsonb")
        @Column(columnDefinition = "airport")
        private List airport;
    

    我就这么简单的解决了这个问题,不知道能不能帮到别人。

    编辑 -> jsonb 作为一个列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多