6

Abbiamo due applicazioni Spring Boot con un'architettura client-server. Il back-end è configurato con Spring Data REST + JPA. Il front-end dovrebbe consumare le risorse esposte dal back-end e servire una API REST pubblica.Come associare le entità REST di Spring Data per trasferire oggetti?

È possibile disporre di dati Spring per mappare automaticamente gli oggetti dominio da DTO dichiarando, ad esempio, un bean mapper?

// 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

qualsiasi soluzione RJo? sto affrontando lo stesso numero atm .. – freakman

risposta

3

Possiamo utilizzare la funzione di proiezione (disponibile dalla 2.2.x in poi) in Spring Data REST. Qualcosa come di seguito:

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

Quando si chiama RESTO impostato il parametro "proiezione" a "orderDTO" cioè

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

Si prega di fare riferimento:

.210

Nota:

  • Impostando attributo excerptProjection in RepositoryRestResource annotazione, tornerà la proiezione di default senza parametro "proiezione".
  • "projection" è richiesto quando annota l'interfaccia usando @Projection e lo inseriamo nello stesso pacchetto del tipo di dominio o di un sotto pacchetto di esso.
+0

Questo non è esattamente quello che cercavo, dal momento che assomiglio più ad una proiezione "predefinita" senza dover dare il parametro di proiezione, ma poiché non sono state fornite risposte migliori, l'ho contrassegnato come corretto – RJo

+1

Impostando l'attributo excerptProjection nell'annotazione RepositoryRestResource, verrà restituita la proiezione per impostazione predefinita senza parametro "proiezione". – charybr

+0

Grande, che risolve la maggior parte dei nostri problemi – RJo

Problemi correlati