【问题标题】:Spring Data Rest POST response different from GET responseSpring Data Rest POST 响应与 GET 响应不同
【发布时间】:2018-11-25 22:41:27
【问题描述】:

在我的 Spring Data Rest 项目中,我有一个 Competition 实体,它引用了一个 GeoLocation 实体:

public class Competition {
    @Id
    private String uname;

    [...]

    @NotNull
    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
    private GeoLocation geoLocation;
}

public class GeoLocation {
    @Id private Long id;
    private Double latitude;
    private Double longitude;
}

由于每个Competition 都必须定义一个GeoLocation,因此Competition 实体通过cascade 处理创建。通过 POST 创建新的 Competition 实体时,我收到以下响应:

{
    "uname": "Some Competition",
    "geoLocation": {
        [content of geoLocation]
    },
    "_links": {
        [...]
    }
}

但是当我调用新创建的比赛时,GeoLocation 的内容会被包裹在一个content 字段中。

{
    "uname": "Some Competition",
    "geoLocation": {
        "content": {
            [content of geoLocation]
        }        
    },
    "_links": {
        [...]
    }
}

我希望这两个请求会提供相同的响应?

【问题讨论】:

  • 可能与我在这里询问的问题相同:stackoverflow.com/questions/42395831/…
  • @AlanHay 看起来几乎一模一样,谢谢。
  • 如果是这样,让你们的关系急切可能会解决。
  • 你又是对的@AlanHay。更改为 Eager 解决了这个问题。

标签: spring hibernate jpa spring-data-rest


【解决方案1】:

@JsonUnwrapped 为我解决了这个问题:

public class Competition {
    @Id
    private String uname;

    [...]

    @NotNull
    @JsonUnwrapped
    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
    private GeoLocation geoLocation;
}

【讨论】:

    猜你喜欢
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 2017-10-18
    • 2015-11-10
    • 2017-09-11
    • 2019-10-11
    相关资源
    最近更新 更多