복붙노트

[SPRING] 리소스의 엔티티 링크를 포함하지 않는 Spring 데이터 REST

SPRING

리소스의 엔티티 링크를 포함하지 않는 Spring 데이터 REST

Spring 4.2.0에서 알려진 버그 인 것처럼 보입니다. 4.2.1로 업그레이드하면 예상 된 기능이 제공됩니다.

내 개발자 팀을 Spring + WebMVC + Data-REST + Data-JPA + Spring HATEOAS 웹 응용 프로그램으로 이동하려고합니다. 현재 사용중인 응용 프로그램은 계속 진행중인 응용 프로그램의 목록을 유지하려고합니다.

내 기본 Spring Data REST 설정에 문제가있다. 내 리소스는 컬렉션 뷰에 포함되어 있지만 자신의 특정 뷰에는 링크 된 리소스를 포함하지 않습니다.

이것이 의도 된 행동인지 아닌지 잘 모르겠습니다. 그래서이 게시물의 끝에 관련 설정 등을 포함 할 것입니다.

jv.local은 내 개발자 상자입니다. apps-list / 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
        }
      }
    } ]
  }
}

(특히 부서는 기관이 _ 링크에 제대로 링크되어 있습니다.)

그러나 특정 부서를 가져 오면

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

구성은 @Imports를 통해 루트 AppConfig 클래스에 포함됩니다. AppConfig는 getRootConfigClasses ()의 멤버로서 AbstractAnnotationConfigDispatcherServletInitializer 서브 클래스를 통해 지정됩니다.

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

부디! 더 유용한 정보를 제공 할 수 있는지, 아니면 실제로 GH 프로젝트를 제공 할 수 있는지 알려주십시오. 이것이 의도 된 동작이라면 오버 라이딩 할 수있는 방법이 있습니까? 링크를 강제로 표시 하시겠습니까?

시간 내 줘서 고마워!

해결법

  1. ==============================

    1.Spring 4.2에서 이미 잘 알려진 - 고맙게도 이미 수정 된 버그입니다. Spring 4.2.1로 업그레이드하면 (또는 Spring Boot 1.3 M5)이를 수정해야한다.

    Spring 4.2에서 이미 잘 알려진 - 고맙게도 이미 수정 된 버그입니다. Spring 4.2.1로 업그레이드하면 (또는 Spring Boot 1.3 M5)이를 수정해야한다.

  2. from https://stackoverflow.com/questions/32386478/spring-data-rest-not-including-entity-links-in-resource by cc-by-sa and MIT license