6

우리는 클라이언트 - 서버 아키텍처를 가진 두 개의 Spring Boot 애플리케이션을 가지고 있습니다. 백엔드는 스프링 데이터 REST + JPA로 구성됩니다. 프론트 엔드는 백엔드가 공개하는 자원을 소비하고 공개 REST API를 제공해야합니다.Spring 데이터 REST 엔티티를 오브젝트 전송에 바인드하는 방법은 무엇입니까?

예를 들어 매퍼 빈 (mapper bean)을 선언하여 DTO에서 자동으로 도메인 객체를 매핑 할 수 있습니까?

// JPA persistable 
@Entity 
public class Order { .. } 

// Immutable DTO 
public class OrderDto { .. } 

// Is this somehow possible.. 
@RepositoryRestResource 
public interface OrderDtoRepository extends CrudRepository<OrderDto, Long> {} 

// .. instead of this? 
@RepositoryRestResource 
public interface OrderRepository extends CrudRepository<Order, Long> {} 
+0

임의의 솔루션 RJo? 메신저 같은 문제를 직면하고있다 .. – freakman

답변

3

스프링 데이터 REST에서 Projection 기능 (2.2.x부터 사용 가능)을 사용할 수 있습니다. 뭔가 아래 같은 :

,691 : 전화 REST는 즉 "orderDTO는"

http://host/app/order?projection=orderDTO 

참조하십시오하는 "투사"매개 변수를 설정

import org.springframework.data.rest.core.config.Projection; 

@Projection(name = "orderDTO", types = Order.class) 
public interface OrderDTO { 
    //get attributes required for DTO 
    String getOrderName(); 
} 

@RepositoryRestResource(excerptProjection = OrderDTO.class) 
public interface OrderRepository extends CrudRepository<Order, Long> { 
} 

363,210

참고 :

  • RepositoryRestResource 주석에 excerptProjection 속성을 설정함으로써, "투사"매개 변수없이 기본적으로 투사를 반환합니다.
  • @Projection을 사용하여 인터페이스에 주석을 추가하고 도메인 유형 또는 하위 패키지와 동일한 패키지에 배치하려면 "projection"이 필요합니다.
+0

이것은 프로젝션 매개 변수를 제공하지 않고 "기본"투영과 더 비슷하게 보였으므로 정확하지 않다. 그러나 더 나은 응답이 제공되지 않았으므로 올바른 것으로 표시했다. – RJo

+1

RepositoryRestResource 어노테이션에서 excerptProjection 속성을 설정하면 기본적으로 "projection"매개 변수없이 프로젝션을 리턴합니다. – charybr

+0

위대한, 우리 대부분의 문제를 해결합니다 – RJo