Fixed a bug in saving entities via PUT.

This commit is contained in:
Jon Brisbin
2012-05-10 07:06:28 -05:00
parent 27322ddcf9
commit d177cc7753
2 changed files with 33 additions and 34 deletions

View File

@@ -100,7 +100,7 @@ This would result in a link value of:
### Hiding certain Repositories, query methods, or fields
You may not want a certain Repository, a query method on a Repository, or a field of your entity to be exported at all. To tell the exporter to not export your these items, annotate them with `@RestResource` and set `exported = false`.
You may not want a certain Repository, a query method on a Repository, or a field of your entity to be exported at all. To tell the exporter to not export these items, annotate them with `@RestResource` and set `exported = false`.
For example, to skip exporting a Repository:
@@ -121,7 +121,6 @@ To skip exporting a query method:
Or to skip exporting a field:
@Entity
@RestResource(exported = false)
public class Person {
@Id @GeneratedValue private Long id;
@OneToMany

View File

@@ -516,44 +516,44 @@ public class RepositoryRestController
.idAttribute()
.type());
CrudRepository repo = repoMeta.repository();
Object entity = null;
Class<?> domainType = repoMeta.entityMetadata().type();
switch (request.getMethod()) {
case POST:
entity = domainType.newInstance();
break;
case PUT:
entity = repo.findOne(serId);
break;
}
if (null == entity) {
model.addAttribute(STATUS, HttpStatus.NOT_FOUND);
final MediaType incomingMediaType = request.getHeaders().getContentType();
final Object incoming = readIncoming(request, incomingMediaType, domainType);
if (null == incoming) {
throw new HttpMessageNotReadableException("Could not create an instance of " + domainType.getSimpleName() + " from input.");
} else {
final MediaType incomingMediaType = request.getHeaders().getContentType();
final Object incoming = readIncoming(request, incomingMediaType, domainType);
if (null == incoming) {
throw new HttpMessageNotReadableException("Could not create an instance of " + domainType.getSimpleName() + " from input.");
repoMeta.entityMetadata().idAttribute().set(serId, incoming);
if (request.getMethod() == HttpMethod.POST) {
if (null != applicationContext) {
applicationContext.publishEvent(new BeforeSaveEvent(incoming));
}
Object savedEntity = repo.save(incoming);
if (null != applicationContext) {
applicationContext.publishEvent(new AfterSaveEvent(savedEntity));
}
URI selfUri = buildUri(baseUri, repository, id);
HttpHeaders headers = new HttpHeaders();
headers.set(LOCATION, selfUri.toString());
model.addAttribute(HEADERS, headers);
model.addAttribute(STATUS, HttpStatus.CREATED);
} else {
repoMeta.entityMetadata().idAttribute().set(serId, incoming);
if (request.getMethod() == HttpMethod.POST) {
if (null != applicationContext) {
applicationContext.publishEvent(new BeforeSaveEvent(incoming));
}
Object savedEntity = repo.save(incoming);
if (null != applicationContext) {
applicationContext.publishEvent(new AfterSaveEvent(savedEntity));
}
URI selfUri = buildUri(baseUri, repository, id);
HttpHeaders headers = new HttpHeaders();
headers.set(LOCATION, selfUri.toString());
model.addAttribute(HEADERS, headers);
model.addAttribute(STATUS, HttpStatus.CREATED);
Object entity = repo.findOne(serId);
if (null == entity) {
model.addAttribute(STATUS, HttpStatus.NOT_FOUND);
} else {
if (null != applicationContext) {
applicationContext.publishEvent(new BeforeSaveEvent(incoming));
for (AttributeMetadata attrMeta : (Collection<AttributeMetadata>) repoMeta.entityMetadata()
.embeddedAttributes()
.values()) {
Object incomingVal = attrMeta.get(incoming);
if (null != incomingVal) {
attrMeta.set(incomingVal, entity);
}
}
Object savedEntity = repo.save(incoming);
if (null != applicationContext) {
applicationContext.publishEvent(new BeforeSaveEvent(entity));
}
Object savedEntity = repo.save(entity);
if (null != applicationContext) {
applicationContext.publishEvent(new AfterSaveEvent(savedEntity));
}