Skip to content

Commit 8b409e0

Browse files
author
Eugen
committed
discoverability work
1 parent 279ccd2 commit 8b409e0

3 files changed

Lines changed: 72 additions & 5 deletions

File tree

spring-security-rest/src/main/java/org/baeldung/web/controller/ResourceCreated.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
public class ResourceCreated extends ApplicationEvent {
99
private final HttpServletResponse response;
1010
private final HttpServletRequest request;
11-
private final long idOfCreatedResource;
11+
private final long idOfNewResource;
1212

13-
public ResourceCreated(final Object source, final HttpServletRequest request, final HttpServletResponse response, final long idOfCreatedResource) {
13+
public ResourceCreated(final Object source, final HttpServletRequest request, final HttpServletResponse response, final long idOfNewResource) {
1414
super(source);
1515

1616
this.request = request;
1717
this.response = response;
18-
this.idOfCreatedResource = idOfCreatedResource;
18+
this.idOfNewResource = idOfNewResource;
1919
}
2020

2121
// API
@@ -28,8 +28,8 @@ public HttpServletRequest getRequest() {
2828
return request;
2929
}
3030

31-
public long getIdOfCreatedResource() {
32-
return idOfCreatedResource;
31+
public long getIdOfNewResource() {
32+
return idOfNewResource;
3333
}
3434

3535
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.baeldung.web.controller;
2+
3+
import java.net.URI;
4+
5+
import javax.servlet.http.HttpServletRequest;
6+
import javax.servlet.http.HttpServletResponse;
7+
8+
import org.springframework.context.ApplicationListener;
9+
import org.springframework.stereotype.Component;
10+
import org.springframework.web.util.UriTemplate;
11+
12+
import com.google.common.base.Preconditions;
13+
import com.google.common.net.HttpHeaders;
14+
15+
@Component
16+
class ResourceCreatedDiscoverabilityListener implements ApplicationListener<ResourceCreated> {
17+
18+
@Override
19+
public void onApplicationEvent(final ResourceCreated resourceCreatedEvent) {
20+
Preconditions.checkNotNull(resourceCreatedEvent);
21+
22+
final HttpServletRequest request = resourceCreatedEvent.getRequest();
23+
final HttpServletResponse response = resourceCreatedEvent.getResponse();
24+
final long idOfNewResource = resourceCreatedEvent.getIdOfNewResource();
25+
26+
addLinkHeaderOnResourceCreation(request, response, idOfNewResource);
27+
}
28+
29+
void addLinkHeaderOnResourceCreation(final HttpServletRequest request, final HttpServletResponse response, final long idOfNewResource) {
30+
final String requestUrl = request.getRequestURL().toString();
31+
final URI uri = new UriTemplate("{requestUrl}/{idOfNewResource}").expand(requestUrl, idOfNewResource);
32+
response.setHeader(HttpHeaders.LOCATION, uri.toASCIIString());
33+
}
34+
35+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.baeldung.web.controller;
2+
3+
import javax.servlet.http.HttpServletRequest;
4+
import javax.servlet.http.HttpServletResponse;
5+
6+
import org.springframework.context.ApplicationListener;
7+
import org.springframework.stereotype.Component;
8+
9+
import com.google.common.base.Preconditions;
10+
11+
@Component
12+
class SingleResourceRetrievedDiscoverabilityListener implements ApplicationListener<SingleResourceRetrieved> {
13+
14+
@Override
15+
public void onApplicationEvent(final SingleResourceRetrieved resourceRetrievedEvent) {
16+
Preconditions.checkNotNull(resourceRetrievedEvent);
17+
18+
final HttpServletRequest request = resourceRetrievedEvent.getRequest();
19+
final HttpServletResponse response = resourceRetrievedEvent.getResponse();
20+
addLinkHeaderOnSingleResourceRetrieval(request, response);
21+
}
22+
23+
void addLinkHeaderOnSingleResourceRetrieval(final HttpServletRequest request, final HttpServletResponse response) {
24+
final StringBuffer requestURL = request.getRequestURL();
25+
final int positionOfLastSlash = requestURL.lastIndexOf("/");
26+
final String uriForResourceCreation = requestURL.substring(0, positionOfLastSlash);
27+
28+
// final String linkHeaderValue = RESTURLUtil.createLinkHeader(uriForResourceCreation, "collection");
29+
// response.addHeader(LINK_HEADER, linkHeaderValue);
30+
}
31+
32+
}

0 commit comments

Comments
 (0)