Spring Data REST не включает ссылки на сущности в ресурсе

Решено решением Оливера Гирке

Похоже, это была известная ошибка в Spring 4.2.0, обновление до 4.2.1 обеспечило ожидаемую функциональность

Оригинальный вопрос

Я работаю над переводом моей команды разработчиков на Spring + WebMVC + Data-REST + Data-JPA + Spring HATEOAS для веб-приложений. Мое текущее приложение просто будет вести список наших текущих приложений.

У меня проблема с настройкой Spring Data REST по умолчанию.Мои ресурсы не включают их связанный ресурс в их определенные представления, в то время как они включены в представление коллекции.

Я не уверен, является ли это предполагаемым поведением или нет, поэтому я включу соответствующие конфиги и тому подобное в конце этого поста.

jv.local мой блок разработчика, список приложений / app - это то, к чему привязан spring-data-rest (конфигурация включена ниже)

Пример:

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)

Тем не менее, потянув за конкретный отдел приводит к

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?

Определения сущностей

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);
}
Configs

Конфиги включены из корневого класса AppConfig через @Imports. AppConfig указывается черезAbstractAnnotationConfigDispatcherServletInitializer подкласс как членgetRootConfigClasses().

Класс AppConfig помечается следующим

@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весенний контекст, 4.2.0Spring-Orm, 4.2.0spring-data-jpa 1.8.2Джексон-ядро 2.6.1Jackson-Databind 2.6.1сервлет 3.1.0spring-data-rest-webmvc 2.3.2весна-хатеоас 0.18.0

Пожалуйста! дайте мне знать, могу ли я предоставить более полезную информацию или, возможно, работающий проект GH. Если это предполагаемое поведение, есть ли способ переопределить и принудительно отобразить ссылки?

Спасибо за ваше время!

Ответы на вопрос(1)

Ваш ответ на вопрос