Spring Data REST不包括资源中的实体链接 [英] Spring Data REST not including entity links in resource

查看:186
本文介绍了Spring Data REST不包括资源中的实体链接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

看起来这是Spring 4.2.0中的已知错误,升级到4.2.1提供了预期的功能

Looks like this was a known bug in Spring 4.2.0, upgrading to 4.2.1 has provided the expected functionality

我正在努力将我的开发团队转移到用于Web应用程序的Spring + WebMVC + Data-REST + Data-JPA + Spring HATEOAS。我当前的应用程序只是维护我们正在进行的应用程序列表。

I'm working on moving my dev team over to Spring + WebMVC + Data-REST + Data-JPA + Spring HATEOAS for web applications. My current app is just going to maintain a list of our ongoing applications.

我遇到了我的默认Spring Data REST设置问题。 我的资源未在其特定视图中包含其关联资源,而它们包含在集合视图中。

I'm running into an issue with my default Spring Data REST setup. My resources aren't including their linked resource in their specific views, while they are included in the collection view.

我不确定如果这是预期的行为,那么我将在本文末尾包括相关的配置等。

I'm not sure if this is intended behavior or not, so I'll include relevant configs and such at the end of this post.

jv.local 是我的开发框,
apps-list / app是spring-data-rest绑定的地方(下面包含配置)

jv.local is my dev box, apps-list/app is where spring-data-rest is bound to (config included below)

示例:

curl jv.local:8080/apps-list/app/departments

退货:

{
  "_links" : {
    "self" : {
      "href" : "http://jv.local:8080/apps-list/app/departments{?page,size,sort}",
      "templated" : true
    }
  },
  "_embedded" : {
    "departments" : [ {
      "name" : "Dining",
      "_links" : {
        "self" : {
          "href" : "http://jv.local:8080/apps-list/app/departments/1",
          "templated" : false
        },
        "institution" : {
          "href" : "http://jv.local:8080/apps-list/app/departments/1/institution",
          "templated" : false
        }
      }
    }, {
      "name" : "Housing",
      "_links" : {
        "self" : {
          "href" : "http://jv.local:8080/apps-list/app/departments/2",
          "templated" : false
        },
        "institution" : {
          "href" : "http://jv.local:8080/apps-list/app/departments/2/institution",
          "templated" : false
        }
      }
    } ]
  }
}

(特别注意部门在_links中将其机构正确链接)

(Note in particular that departments have their institution linked properly in _links)

然而,拉动特定部门会导致

However, pulling a specific department results in

curl jv.local:8080/apps-list/app/departments/1
{
  "name" : "Dining",
  "_links" : {
    "self" : {
      "href" : "http://jv.local:8080/apps-list/app/departments/1",
      "templated" : false
    }
  }
}

此处部门没有列出任何相关机构。有没有办法在_links中启用该机构?

Here the department has no associated institution listed. Is there a way to enable the institution in _links?

Department.java

@Entity
@Table(name="department")
public class Department {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

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

    @ManyToOne(optional = false)
    @JoinColumn(name="institution", referencedColumnName="id")
    @RestResource
    private Institution institution;

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    . . . more getters/setters like above
}

Institution.java

@Entity
@Table(name = "institution")
public class Institution {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "name", unique = true)
    private String name;

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    . . . name getter/setter
}



存储库



DepartmentRepository.java

@RestResource(rel="departments",path="departments")
public interface DepartmentRepository extends JpaRepository<Department, Long> {
}

InstitutionRepository.java

@RestResource(rel="institutions",path="institutions")
public interface InstitutionRepository extends JpaRepository<Institution, Long> {
    Institution findFirstByName(String name);
}



配置



通过@Imports从根AppConfig类中包含配置。 AppConfig通过 AbstractAnnotationConfigDispatcherServletInitializer 子类指定为 getRootConfigClasses()的成员。

Configs

Configs are included from a root AppConfig class via @Imports. AppConfig is specified via AbstractAnnotationConfigDispatcherServletInitializer subclass as a member of getRootConfigClasses().

AppConfig类使用以下内容进行注释

AppConfig class is annotated with the following

@Configuration
@ComponentScan({my.packages, my.other.packages})
@EnableSpringDataWebSupport
@EnableTransactionManagement
@EnableJpaRepositories(my.repository.location)
@EnableWebMvc
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Import({PersistenceConfiguration.class, RestConfiguration.class, MvcConfiguration.class, SecurityConfiguration.class})

RestConfiguration.java

@Configuration
public class RestConfiguration extends RepositoryRestMvcConfiguration {
    @Override
    public RepositoryRestConfiguration config() {
      RepositoryRestConfiguration config = super.config();
      config.setBasePath("/app");
      return config;
    }
}



版本信息




  • spring-webmvc,4.2.0

  • spring-context,4.2.0

  • spring -orm,4.2.0

  • spring-data-jpa 1.8.2

  • jackson-core 2.6.1

  • jackson-databind 2.6.1

  • servlet 3.1.0

  • spring-data-rest-webmvc 2.3.2

  • spring-hateoas 0.18.0

  • Version Information

    • spring-webmvc, 4.2.0
    • spring-context, 4.2.0
    • spring-orm, 4.2.0
    • spring-data-jpa 1.8.2
    • jackson-core 2.6.1
    • jackson-databind 2.6.1
    • servlet 3.1.0
    • spring-data-rest-webmvc 2.3.2
    • spring-hateoas 0.18.0
    • 请!让我知道我是否可以提供更多有用的信息,或者可能是一个有效的GH项目。如果这是预期的行为,有没有办法覆盖,并强制显示链接?

      Please! let me know if I can provide any more useful information, or possibly a working GH project. If this is intended behavior, is there any way to override, and force links to display?

      感谢您的时间!

      推荐答案

      这是一个众所周知的 - 幸好已经修复了 - Spring 4.2中的错误。升级到Spring 4.2.1应该修复它(或Spring Boot 1.3 M5)。

      That's a well-known – and thankfully already fixed – bug in Spring 4.2. Upgrading to Spring 4.2.1 should fix that (or Spring Boot 1.3 M5).

      这篇关于Spring Data REST不包括资源中的实体链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆