Using the new Location support
This commit is contained in:
parent
512fb68c90
commit
18cdfdc62a
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user