diff --git a/spring-data-rest-repository/src/main/java/org/springframework/data/rest/repository/jpa/JpaEntityMetadata.java b/spring-data-rest-repository/src/main/java/org/springframework/data/rest/repository/jpa/JpaEntityMetadata.java index ad30a6802..821408a04 100644 --- a/spring-data-rest-repository/src/main/java/org/springframework/data/rest/repository/jpa/JpaEntityMetadata.java +++ b/spring-data-rest-repository/src/main/java/org/springframework/data/rest/repository/jpa/JpaEntityMetadata.java @@ -19,8 +19,7 @@ import org.springframework.util.StringUtils; * * @author Jon Brisbin */ -public class JpaEntityMetadata - implements EntityMetadata { +public class JpaEntityMetadata implements EntityMetadata { private Class type; private JpaAttributeMetadata idAttribute; diff --git a/spring-data-rest-repository/src/test/java/org/springframework/data/rest/repository/test/Person.java b/spring-data-rest-repository/src/test/java/org/springframework/data/rest/repository/test/Person.java index e295837df..2b342fbb7 100644 --- a/spring-data-rest-repository/src/test/java/org/springframework/data/rest/repository/test/Person.java +++ b/spring-data-rest-repository/src/test/java/org/springframework/data/rest/repository/test/Person.java @@ -5,14 +5,14 @@ import javax.persistence.GeneratedValue; import javax.persistence.Id; /** - * @author Jon Brisbin + * @author Jon Brisbin */ @Entity public class Person { @Id @GeneratedValue - private Long id; + private Long id; private String name; public Person() { diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestController.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestController.java index 76e90b784..fb97e6ba2 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestController.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestController.java @@ -425,12 +425,11 @@ public class RepositoryRestController resources.addLink(new SimpleLink(repoMeta.rel() + "." + o.getClass().getSimpleName(), buildUri(baseUri, repository, id.toString()))); } else { + URI selfUri = buildUri(baseUri, repository, id.toString()); MapResource res = createResource(repoMeta.rel(), o, repoMeta.entityMetadata(), - buildUri(baseUri, repository, id.toString())); - - URI selfUri = buildUri(baseUri, repository, id.toString()); + selfUri); res.addLink(new SimpleLink(SELF, selfUri)); resources.addResource(res); @@ -660,12 +659,11 @@ public class RepositoryRestController URI path = buildUri(baseUri, repository, id); resources.addLink(new SimpleLink(rel, path)); } else { + URI selfUri = buildUri(baseUri, repository, id); MapResource res = createResource(repoMeta.rel(), obj, repoMeta.entityMetadata(), - buildUri(baseUri, repository, id)); - - URI selfUri = buildUri(baseUri, repository, id); + selfUri); res.addLink(new SimpleLink(SELF, selfUri)); resources.addResource(res); @@ -731,13 +729,14 @@ public class RepositoryRestController MapResource resource = createResource(repoMeta.rel(), savedEntity, repoMeta.entityMetadata(), - buildUri(baseUri, repository, sId)); + selfUri); resource.addLink(new SimpleLink(SELF, selfUri)); + + publishEvent(new BeforeRenderResourceEvent(request, repoMeta, body)); + body = resource; } - publishEvent(new BeforeRenderResourceEvent(request, repoMeta, body)); - return negotiateResponse(request, HttpStatus.CREATED, headers, body); } @@ -792,11 +791,12 @@ public class RepositoryRestController headers.set("ETag", "\"" + version.toString() + "\""); } } + + URI selfUri = buildUri(baseUri, repository, id); MapResource res = createResource(repoMeta.rel(), entity, repoMeta.entityMetadata(), - baseUri); - URI selfUri = buildUri(baseUri, repository, id); + selfUri); res.addLink(new SimpleLink(SELF, selfUri)); publishEvent(new BeforeRenderResourceEvent(request, repoMeta, res)); @@ -882,7 +882,7 @@ public class RepositoryRestController MapResource res = createResource(repoMeta.rel(), savedEntity, repoMeta.entityMetadata(), - baseUri); + selfUri); res.addLink(new SimpleLink(SELF, selfUri)); publishEvent(new BeforeRenderResourceEvent(request, repoMeta, body)); @@ -1284,12 +1284,11 @@ public class RepositoryRestController return notFoundResponse(request); } + URI selfUri = buildUri(baseUri, linkedRepoMeta.name(), linkedId); MapResource res = createResource(linkedRepoMeta.rel(), linkedEntity, linkedRepoMeta.entityMetadata(), - baseUri); - - URI selfUri = buildUri(baseUri, linkedRepoMeta.name(), linkedId); + selfUri); res.addLink(new SimpleLink(SELF, selfUri)); publishEvent(new BeforeRenderResourcesEvent(request, repoMeta, res)); diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/test/webmvc/Customer.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/test/webmvc/Customer.java new file mode 100644 index 000000000..c8c07bb50 --- /dev/null +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/test/webmvc/Customer.java @@ -0,0 +1,29 @@ +package org.springframework.data.rest.test.webmvc; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import javax.persistence.OneToOne; + +/** + * @author Jon Brisbin + */ +@MappedSuperclass +public class Customer { + + @Id @GeneratedValue private Long id; + @OneToOne private Person person; + + public Long getId() { + return id; + } + + public Person getPerson() { + return person; + } + + public void setPerson(Person person) { + this.person = person; + } + +} diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/test/webmvc/WebCustomer.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/test/webmvc/WebCustomer.java new file mode 100644 index 000000000..0aaf2b731 --- /dev/null +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/test/webmvc/WebCustomer.java @@ -0,0 +1,21 @@ +package org.springframework.data.rest.test.webmvc; + +import javax.persistence.Entity; + +/** + * @author Jon Brisbin + */ +@Entity +public class WebCustomer extends Customer { + + private String username; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + +} diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/test/webmvc/WebCustomerRepository.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/test/webmvc/WebCustomerRepository.java new file mode 100644 index 000000000..a3aa49640 --- /dev/null +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/test/webmvc/WebCustomerRepository.java @@ -0,0 +1,9 @@ +package org.springframework.data.rest.test.webmvc; + +import org.springframework.data.repository.CrudRepository; + +/** + * @author Jon Brisbin + */ +public interface WebCustomerRepository extends CrudRepository { +} diff --git a/spring-data-rest-webmvc/src/test/resources/META-INF/persistence.xml b/spring-data-rest-webmvc/src/test/resources/META-INF/persistence.xml index 57a41a4cf..c4e4a13c2 100644 --- a/spring-data-rest-webmvc/src/test/resources/META-INF/persistence.xml +++ b/spring-data-rest-webmvc/src/test/resources/META-INF/persistence.xml @@ -1,11 +1,12 @@ + org.springframework.data.rest.test.webmvc.Address org.springframework.data.rest.test.webmvc.Family org.springframework.data.rest.test.webmvc.Person org.springframework.data.rest.test.webmvc.Profile - org.springframework.data.rest.test.webmvc.Address org.springframework.data.rest.test.webmvc.UuidTest + org.springframework.data.rest.test.webmvc.WebCustomer