Skip to content

Commit 3108b5e

Browse files
committed
Adds attributes method to NativeRequest interface
1 parent 70494cf commit 3108b5e

3 files changed

Lines changed: 43 additions & 5 deletions

File tree

jooby-servlet/src/main/java/org/jooby/servlet/ServletServletRequest.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,7 @@
2323
import java.io.IOException;
2424
import java.io.InputStream;
2525
import java.net.URLDecoder;
26-
import java.util.Arrays;
27-
import java.util.Collections;
28-
import java.util.Enumeration;
29-
import java.util.List;
30-
import java.util.Optional;
26+
import java.util.*;
3127
import java.util.concurrent.Executor;
3228
import java.util.stream.Collectors;
3329

@@ -119,6 +115,15 @@ public List<String> params(final String name) throws Exception {
119115
return Arrays.asList(values);
120116
}
121117

118+
@Override
119+
public Map<String, Object> attributes() {
120+
final Enumeration<String> attributeNames = req.getAttributeNames();
121+
if (!attributeNames.hasMoreElements()) {
122+
return Collections.emptyMap();
123+
}
124+
return Collections.list(attributeNames).stream().collect(Collectors.toMap(name -> name, name -> req.getAttribute(name)));
125+
}
126+
122127
@Override
123128
public List<String> headers(final String name) {
124129
return toList(req.getHeaders(name));

jooby-servlet/src/test/java/org/jooby/servlet/ServletServletRequestTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44
import static org.junit.Assert.assertEquals;
55

66
import java.io.IOException;
7+
import java.util.Arrays;
8+
import java.util.Collections;
9+
import java.util.UUID;
710

811
import javax.servlet.ServletException;
912
import javax.servlet.http.HttpServletRequest;
1013

14+
import com.google.common.collect.ImmutableMap;
1115
import org.jooby.MediaType;
1216
import org.jooby.test.MockUnit;
1317
import org.junit.Test;
@@ -148,6 +152,27 @@ public void noparams() throws IOException, Exception {
148152

149153
}
150154

155+
@Test
156+
public void attributes() throws Exception {
157+
String tmpdir = System.getProperty("java.io.tmpdir");
158+
UUID serverAttribute = UUID.randomUUID();
159+
new MockUnit(HttpServletRequest.class)
160+
.expect(unit -> {
161+
HttpServletRequest req = unit.get(HttpServletRequest.class);
162+
expect(req.getContentType()).andReturn("text/html");
163+
expect(req.getPathInfo()).andReturn("/");
164+
expect(req.getAttributeNames()).andReturn(
165+
Collections.enumeration(Collections.singletonList("server.attribute")));
166+
expect(req.getAttribute("server.attribute")).andReturn(serverAttribute);
167+
})
168+
.run(unit -> {
169+
assertEquals(ImmutableMap.of("server.attribute", serverAttribute),
170+
new ServletServletRequest(unit.get(HttpServletRequest.class), tmpdir)
171+
.attributes());
172+
});
173+
174+
}
175+
151176
@Test(expected = IOException.class)
152177
public void filesFailure() throws IOException, Exception {
153178
String tmpdir = System.getProperty("java.io.tmpdir");

jooby/src/main/java/org/jooby/spi/NativeRequest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import java.io.IOException;
2222
import java.io.InputStream;
23+
import java.util.Collections;
2324
import java.util.List;
2425
import java.util.Map;
2526
import java.util.Optional;
@@ -71,6 +72,13 @@ public interface NativeRequest {
7172
*/
7273
List<String> params(String name) throws Exception;
7374

75+
/**
76+
* @return Map containing all request attributes
77+
*/
78+
default Map<String, Object> attributes() {
79+
return Collections.emptyMap();
80+
}
81+
7482
/**
7583
* Get all the headers for the provided name or a empty list.
7684
*

0 commit comments

Comments
 (0)