diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/Person.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/Person.java new file mode 100644 index 0000000000..90347859eb --- /dev/null +++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/Person.java @@ -0,0 +1,31 @@ +package com.baeldung.serializeentityid; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Person { + + /** + * This doesn't work without a projection + */ + //@JsonProperty + @Id + @GeneratedValue + private Long id; + + private String name; + + public Long getId() { + return this.id; + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return this.name; + } +} diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonController.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonController.java new file mode 100644 index 0000000000..890e0318e8 --- /dev/null +++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonController.java @@ -0,0 +1,27 @@ +package com.baeldung.serializeentityid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.rest.webmvc.RepositoryRestController; +import org.springframework.data.web.PagedResourcesAssembler; +import org.springframework.hateoas.EntityModel; +import org.springframework.hateoas.PagedModel; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; + +@RepositoryRestController +public class PersonController { + + @Autowired + PersonRepository repository; + + @GetMapping("/persons") + ResponseEntity persons(PagedResourcesAssembler resourcesAssembler) { + Page persons = this.repository.findAll(Pageable.ofSize(20)); + Page personDtos = persons.map(PersonDto::new); + PagedModel> pagedModel = resourcesAssembler.toModel(personDtos); + return ResponseEntity.ok(pagedModel); + } + +} diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonDto.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonDto.java new file mode 100644 index 0000000000..80751cbd6b --- /dev/null +++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonDto.java @@ -0,0 +1,21 @@ +package com.baeldung.serializeentityid; + +public class PersonDto { + + private final Long id; + + private final String name; + + public PersonDto(Person person) { + this.id = person.getId(); + this.name = person.getName(); + } + + public Long getId() { + return this.id; + } + + public String getName() { + return this.name; + } +} diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonRepository.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonRepository.java new file mode 100644 index 0000000000..36c81de2c2 --- /dev/null +++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonRepository.java @@ -0,0 +1,7 @@ +package com.baeldung.serializeentityid; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PersonRepository extends JpaRepository { + +} diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonView.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonView.java new file mode 100644 index 0000000000..f66e765406 --- /dev/null +++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/PersonView.java @@ -0,0 +1,15 @@ +package com.baeldung.serializeentityid; + +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +import org.springframework.data.rest.core.config.Projection; + +@JsonPropertyOrder({ "id", "name" }) +@Projection(name = "person-view", types = Person.class) +public interface PersonView { + + Long getId(); + + String getName(); + +} diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/RestConfiguration.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/RestConfiguration.java new file mode 100644 index 0000000000..dbad6565fc --- /dev/null +++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/RestConfiguration.java @@ -0,0 +1,27 @@ +package com.baeldung.serializeentityid; + +import javax.persistence.EntityManager; +import javax.persistence.metamodel.Type; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.rest.core.config.RepositoryRestConfiguration; +import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer; +import org.springframework.web.servlet.config.annotation.CorsRegistry; + +@Configuration +public class RestConfiguration implements RepositoryRestConfigurer { + + @Autowired + private EntityManager entityManager; + + @Override + public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) { + final Class[] classes = this.entityManager.getMetamodel() + .getEntities() + .stream() + .map(Type::getJavaType) + .toArray(Class[]::new); + config.exposeIdsFor(classes); + } +} diff --git a/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/SerializeEntityIdApp.java b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/SerializeEntityIdApp.java new file mode 100644 index 0000000000..7af12f20b2 --- /dev/null +++ b/persistence-modules/spring-data-rest-2/src/main/java/com/baeldung/serializeentityid/SerializeEntityIdApp.java @@ -0,0 +1,32 @@ +package com.baeldung.serializeentityid; + +import javax.annotation.PostConstruct; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SerializeEntityIdApp { + + private final PersonRepository repository; + + public SerializeEntityIdApp(PersonRepository repository) { + this.repository = repository; + } + + @PostConstruct + void onStart() { + final Person person1 = new Person(); + person1.setName("John Doe"); + final Person person2 = new Person(); + person2.setName("Markus Boe"); + + this.repository.save(person1); + this.repository.save(person2); + } + + public static void main(String[] args) { + SpringApplication.run(SerializeEntityIdApp.class, args); + } + +}