【问题标题】:Repository GET returns JSON which contains both a content object and content array存储库 GET 返回包含内容对象和内容数组的 JSON
【发布时间】:2018-12-27 03:32:41
【问题描述】:

我有一个具有多对一关系的实体,当我使用 restTemplate.getForEntity() 时,嵌套实体的值包含在 content 字段中,同时添加了一个 content 数组覆盖它

@ManyToOne(fetch = FetchType.LAZY)
@RestResource(exported = false)
@JoinColumn(name = "namespace", nullable = false)
private Namespace namespace;

具有此关系的实体上的GET 返回以下输出正文

{
  "id" : "some_containing_id",
  "alertDefinition" : null,
  "namespace" : {
    "content" : {
      "id" : "some_namespace_id",
      "emailSenderName" : "some sender",
      "emailSenderId" : "foo@bar.com",
      "createdAt" : "2018-07-19T05:24:04.473Z",
      "updatedAt" : "2018-07-19T05:24:04.473Z"
    },
    "content" : [ ],
    "links" : [ ]
  },
  ...

因此,命名空间正在序列化,其中包含 2 个内容字段,其中数组替换了包含值的内容对象

SpringBoot 2.0.3.RELEASE

命名空间.java

@Entity
@Table(name = "namespace"
    , schema = "alert_notification"
)
public class Namespace implements java.io.Serializable {
    public transient static final String
        EMAIL_SENDER_NAME_DEFAULT = "some sender";
    public transient static final String
        EMAIL_SENDER_ID_DEFAULT = "foo@vbar.com";

    @Id
    @Column(name = "id", unique = true, nullable = false)
    private String id;

    @Builder.Default
    @Column(name = "email_sender_name")
    private String emailSenderName = EMAIL_SENDER_NAME_DEFAULT;

    @Builder.Default
    @Column(name = "email_sender_id")
    private String emailSenderId = EMAIL_SENDER_ID_DEFAULT;

    @CreationTimestamp
    @Column(name = "created_at", nullable = false, updatable = false)
    private OffsetDateTime createdAt;

    @UpdateTimestamp
    @Column(name = "updated_at", nullable = false)
    private OffsetDateTime updatedAt;

}

【问题讨论】:

  • 你的问题到底是什么?
  • 这是个问题,为什么它会生成带有 2 个内容字段的 JSON 响应?这是无效的并且不能正常工作所以要清楚,因为这个我的响应实体的所有值都为 null
  • 请张贴你的Namespace-class的内容
  • 更新了原帖,包括它
  • 请提供一个真实的例子,例如在 github 上发布链接。否则没有任何意义,因为使用您发布的源无法复制任何内容。

标签: spring-boot spring-data-jpa spring-data-rest


【解决方案1】:

由于某种原因,该问题是由最近引入的com.fasterxml.jackson.datatype:jackson-datatype-hibernate5 中包含的Hibernate5 模块引起的。

有趣的是,模块甚至不需要启用,仅依赖于类路径就会导致问题。

【讨论】:

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