【问题标题】:JSON not returning columns in Spring Data RESTJSON 不返回 Spring Data REST 中的列
【发布时间】:2015-05-10 08:45:02
【问题描述】:

我正在尝试 Spring Data REST 的示例,但是在我的测试中返回的 JSON 对象不返回列名(之前是“PUT”),而只是返回到对象的链接。有什么问题?

场景:

实体:“用户”

@Entity
@Data
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private String guid;
    private String fullName;
    private String email;
}

存储库:UserRepository(公开为 REST 服务)

@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends JpaRepository<User, Long> {
}

创建 USER 对象的 REST 'PUT' 请求:

REST GET 调用以获取用户对象的 JSON 响应(问题)

JSON 响应中没有返回 id、Guid 或电子邮件。

【问题讨论】:

  • 您尝试(通过 PUT)更新 id=1 的实体 id=3 是否正常? /users/ 给了你什么?
  • @nKognito 请忽略屏幕截图,我已经用正确的值运行了几次(方法=Post,id=1,entityid=1),结果相同。 /users/ 给了我带有“链接”到所有元素但没有名称、电子邮件属性的 JSON。
  • 尝试通过配置开启exposeIds选项。让我们看看它是否至少会返回实体的标识符
  • 并尝试删除 lombok 的 @Data - 也许它会以某种方式影响...
  • @nKognito 删除 lombok 的数据就可以了。感谢您的指点。令人遗憾的是,龙目岛有这个问题。在 lombok 上提出一个错误(没有发现它是一个已知问题)。

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


【解决方案1】:

删除 lombok 的 @Data 注释使所有基本属性都出现在 JSON 响应中。看起来像是龙目岛的副作用。

【讨论】:

  • 我在 Intelli J 中遇到了类似的问题,但是,启用注释处理解决了这个问题。我以为会抛出一个更“壮观”的错误,但它只是默默地失败了。
【解决方案2】:

我遇到了同样的问题,但我没有使用自动生成的 Lombok 类。

我找到了解决方案。我遇到的问题是只有链接出现在 Spring Data Repository 的 json 输出中。

例如:

 {
      "_embedded": {
        "users": [{
              "_links": {
                "self": {
                  "href": "http://localhost:8080/users/1"
                },
                "user": {
                  "href": "http://localhost:8080/users/1"
                }
              }
            }, {
              "_links": {
                "self": {
                  "href": "http://localhost:8080/users/2"
                },
                "user": {
                  "href": "http://localhost:8080/users/2"
                }
              }
            }, {
              "_links": { ...

解决方案:

getter 和setter 添加到实体中,每个变量对应一个你想在响应中显示的变量。添加 getter 和 setter 后,您将能够再次运行应用程序,并获得包含每个变量值的 json 响应。

在其他答案之一中,解决方法是删除 Lombok @Data 注释。 Lombok 没有及时为使用该注解的类生成 getter 和 setter,因此返回的 JSON 响应中没有一个包含任何初始化值。

结果看起来更好: {

  "_embedded" : {
    "users" : [ {
      "username" : "admin",
      "firstName" : "Administrator",
      "lastName" : "Administrator",
      "roles" : [ { "roleName" : "ROLE_ADMIN", "description" : "Administrator"
      } ],
      "_links" : { "self" : { "href" : "http://localhost:8080/users/1" },
        "user" : { "href" : "http://localhost:8080/users/1" }
      }
    }, {
      "username" : "bobby", ... 

【讨论】:

  • 谢谢你。作为一个刚接触 Spring 并且对 Java 不太熟练的人,这是对我有帮助的答案
猜你喜欢
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 2018-01-17
相关资源
最近更新 更多