Using the new Location support

This commit is contained in:
eugenp 2014-02-13 00:52:06 +02:00
parent 512fb68c90
commit 18cdfdc62a
3 changed files with 11 additions and 18 deletions

View File

@ -79,11 +79,11 @@ public class FooController {
@RequestMapping(method = RequestMethod.POST) @RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED) @ResponseStatus(HttpStatus.CREATED)
public void create(@RequestBody final Foo resource, final HttpServletRequest request, final HttpServletResponse response) { public void create(@RequestBody final Foo resource, final HttpServletResponse response) {
Preconditions.checkNotNull(resource); Preconditions.checkNotNull(resource);
final Long idOfCreatedResource = service.create(resource).getId(); final Long idOfCreatedResource = service.create(resource).getId();
eventPublisher.publishEvent(new ResourceCreated(this, request, response, idOfCreatedResource)); eventPublisher.publishEvent(new ResourceCreated(this, response, idOfCreatedResource));
} }
} }

View File

@ -1,19 +1,16 @@
package org.baeldung.web.util; package org.baeldung.web.util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEvent;
public class ResourceCreated extends ApplicationEvent { public class ResourceCreated extends ApplicationEvent {
private final HttpServletResponse response; private final HttpServletResponse response;
private final HttpServletRequest request;
private final long idOfNewResource; private final long idOfNewResource;
public ResourceCreated(final Object source, final HttpServletRequest request, final HttpServletResponse response, final long idOfNewResource) { public ResourceCreated(final Object source, final HttpServletResponse response, final long idOfNewResource) {
super(source); super(source);
this.request = request;
this.response = response; this.response = response;
this.idOfNewResource = idOfNewResource; this.idOfNewResource = idOfNewResource;
} }
@ -24,10 +21,6 @@ public class ResourceCreated extends ApplicationEvent {
return response; return response;
} }
public HttpServletRequest getRequest() {
return request;
}
public long getIdOfNewResource() { public long getIdOfNewResource() {
return idOfNewResource; return idOfNewResource;
} }

View File

@ -2,15 +2,14 @@ package org.baeldung.web.util;
import java.net.URI; import java.net.URI;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.apache.http.HttpHeaders;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.util.UriTemplate; import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.google.common.net.HttpHeaders;
@Component @Component
class ResourceCreatedDiscoverabilityListener implements ApplicationListener<ResourceCreated> { class ResourceCreatedDiscoverabilityListener implements ApplicationListener<ResourceCreated> {
@ -19,16 +18,17 @@ class ResourceCreatedDiscoverabilityListener implements ApplicationListener<Reso
public void onApplicationEvent(final ResourceCreated resourceCreatedEvent) { public void onApplicationEvent(final ResourceCreated resourceCreatedEvent) {
Preconditions.checkNotNull(resourceCreatedEvent); Preconditions.checkNotNull(resourceCreatedEvent);
final HttpServletRequest request = resourceCreatedEvent.getRequest();
final HttpServletResponse response = resourceCreatedEvent.getResponse(); final HttpServletResponse response = resourceCreatedEvent.getResponse();
final long idOfNewResource = resourceCreatedEvent.getIdOfNewResource(); final long idOfNewResource = resourceCreatedEvent.getIdOfNewResource();
addLinkHeaderOnResourceCreation(request, response, idOfNewResource); addLinkHeaderOnResourceCreation(response, idOfNewResource);
} }
void addLinkHeaderOnResourceCreation(final HttpServletRequest request, final HttpServletResponse response, final long idOfNewResource) { void addLinkHeaderOnResourceCreation(final HttpServletResponse response, final long idOfNewResource) {
final String requestUrl = request.getRequestURL().toString(); // final String requestUrl = request.getRequestURL().toString();
final URI uri = new UriTemplate("{requestUrl}/{idOfNewResource}").expand(requestUrl, idOfNewResource); // final URI uri = new UriTemplate("{requestUrl}/{idOfNewResource}").expand(requestUrl, idOfNewResource);
final URI uri = ServletUriComponentsBuilder.fromCurrentRequestUri().path("/{idOfNewResource}").buildAndExpand(idOfNewResource).toUri();
response.setHeader(HttpHeaders.LOCATION, uri.toASCIIString()); response.setHeader(HttpHeaders.LOCATION, uri.toASCIIString());
} }