Skip to content
This repository was archived by the owner on Mar 3, 2026. It is now read-only.

Commit 698a14f

Browse files
committed
Request local changes
* supports injection of local attributes fix jooby-project#278 * request local attributes: change return type of req.get from Optional<T> to <T> fix jooby-project#279
1 parent ed9106e commit 698a14f

File tree

24 files changed

+337
-29
lines changed

24 files changed

+337
-29
lines changed

coverage-report/src/test/java/org/jooby/CsrfFeature.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ public class CsrfFeature extends ServerFeature {
1111
{
1212
use("*", new CsrfHandler());
1313

14-
get("/csrf", req -> req.get("csrf").get());
14+
get("/csrf", req -> req.ifGet("csrf").get());
1515

16-
post("/csrf", req -> req.get("csrf").get());
16+
post("/csrf", req -> req.ifGet("csrf").get());
1717
}
1818

1919
@Test

coverage-report/src/test/java/org/jooby/RequestLocalsFeature.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class RequestLocalsFeature extends ServerFeature {
2121
assertFalse(req.isSet("l1"));
2222
req.set("l1", "v1");
2323
assertTrue(req.isSet("l1"));
24-
return req.get("l1");
24+
return req.ifGet("l1");
2525
});
2626

2727
get("/locals/unset", (req) -> {

coverage-report/src/test/java/org/jooby/issues/Issue25.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ public class Issue25 extends ServerFeature {
1111

1212
{
1313
get("/contextPath", req -> {
14-
assertEquals("", req.get("contextPath").get());
14+
assertEquals("", req.ifGet("contextPath").get());
1515
assertEquals("/", req.require(Config.class).getString("application.path"));
1616
return req.path();
1717
});
1818

1919
get("/req-path", req -> {
20-
assertEquals("/req-path", req.get("path").get());
20+
assertEquals("/req-path", req.ifGet("path").get());
2121
assertEquals("/req-path", req.path());
2222
return req.path();
2323
});
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.jooby.issues;
2+
3+
import org.jooby.mvc.GET;
4+
import org.jooby.mvc.Local;
5+
import org.jooby.mvc.Path;
6+
import org.jooby.test.ServerFeature;
7+
import org.junit.Test;
8+
9+
public class Issue278 extends ServerFeature {
10+
11+
@Path("/issue278")
12+
public static class Resource {
13+
14+
@GET
15+
public Object local(@Local final int local) {
16+
return local;
17+
}
18+
}
19+
20+
{
21+
use("*", (req, rsp) -> {
22+
req.set("local", 678);
23+
});
24+
25+
use(Resource.class);
26+
}
27+
28+
@Test
29+
public void shouldNotDisplayStacktrace() throws Exception {
30+
request().get("/issue278").expect("678");
31+
}
32+
33+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.jooby.issues;
2+
3+
import java.util.Optional;
4+
5+
import org.jooby.mvc.GET;
6+
import org.jooby.mvc.Local;
7+
import org.jooby.mvc.Path;
8+
import org.jooby.test.ServerFeature;
9+
import org.junit.Test;
10+
11+
public class Issue278b extends ServerFeature {
12+
13+
@Path("/issue278")
14+
public static class Resource {
15+
16+
@GET
17+
public Object local(@Local final Optional<Integer> local) {
18+
return local;
19+
}
20+
}
21+
22+
{
23+
use("*", (req, rsp) -> {
24+
req.set("local", 678);
25+
});
26+
27+
use(Resource.class);
28+
}
29+
30+
@Test
31+
public void shouldNotDisplayStacktrace() throws Exception {
32+
request().get("/issue278").expect("Optional[678]");
33+
}
34+
35+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.jooby.issues;
2+
3+
import java.util.Map;
4+
5+
import org.jooby.mvc.GET;
6+
import org.jooby.mvc.Local;
7+
import org.jooby.mvc.Path;
8+
import org.jooby.test.ServerFeature;
9+
import org.junit.Test;
10+
11+
public class Issue278c extends ServerFeature {
12+
13+
@Path("/issue278")
14+
public static class Resource {
15+
16+
@GET
17+
public Object local(@Local final Map<String, Object> local) {
18+
return local;
19+
}
20+
}
21+
22+
{
23+
use("*", (req, rsp) -> {
24+
req.set("local", 678);
25+
});
26+
27+
use(Resource.class);
28+
}
29+
30+
@Test
31+
public void shouldNotDisplayStacktrace() throws Exception {
32+
request().get("/issue278").expect("{path=/issue278, contextPath=, local=678}");
33+
}
34+
35+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.jooby.issues;
2+
3+
import org.jooby.test.ServerFeature;
4+
import org.junit.Test;
5+
6+
public class Issue279 extends ServerFeature {
7+
8+
{
9+
use("*", (req, rsp) -> {
10+
req.set("local", 678);
11+
});
12+
13+
use("/issue279")
14+
.get("/get", req -> {
15+
int value = req.get("local");
16+
return value;
17+
})
18+
.get("/getdef", req -> {
19+
String value = req.get("def", "def");
20+
return value;
21+
})
22+
.get("/geterr", req -> {
23+
String value = req.get("def");
24+
return value;
25+
});
26+
}
27+
28+
@Test
29+
public void getRequestLocals() throws Exception {
30+
request().get("/issue279/get").expect("678");
31+
32+
request().get("/issue279/getdef").expect("def");
33+
34+
request().get("/issue279/geterr").expect(400);
35+
}
36+
37+
}

jooby-hbs/src/main/java/org/jooby/internal/hbs/RequestValueResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public class RequestValueResolver implements ValueResolver {
3737
public Object resolve(final Object context, final String name) {
3838
Object value = null;
3939
if (context instanceof Request) {
40-
value = ((Request) context).get(name).orElse(null);
40+
value = ((Request) context).ifGet(name).orElse(null);
4141
}
4242
return value == null ? UNRESOLVED : value;
4343
}

jooby-hbs/src/test/java/org/jooby/internal/hbs/RequestValueResolverTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public void resolveProperty() throws Exception {
2323
new MockUnit(Request.class)
2424
.expect(unit -> {
2525
Request Request = unit.get(Request.class);
26-
expect(Request.get("prop")).andReturn(Optional.of("x"));
26+
expect(Request.ifGet("prop")).andReturn(Optional.of("x"));
2727
})
2828
.run(unit -> {
2929
assertEquals("x", new RequestValueResolver().resolve(unit.get(Request.class), "prop"));
@@ -35,7 +35,7 @@ public void resolveMissingProperty() throws Exception {
3535
new MockUnit(Request.class)
3636
.expect(unit -> {
3737
Request Request = unit.get(Request.class);
38-
expect(Request.get("prop")).andReturn(Optional.empty());
38+
expect(Request.ifGet("prop")).andReturn(Optional.empty());
3939
})
4040
.run(
4141
unit -> {

jooby-pac4j/src/main/java/org/jooby/internal/pac4j/AuthCallback.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public void handle(final Request req, final Response rsp, final Chain chain) thr
9292

9393
// where to go? if there is a local var set, it use that. If there is a session var set, it
9494
// use that. Otherwise, it use the global property: "auth.login.redirectTo".
95-
String requestedUrl = req.<String> get(Pac4jConstants.REQUESTED_URL).orElseGet(() -> {
95+
String requestedUrl = req.<String> ifGet(Pac4jConstants.REQUESTED_URL).orElseGet(() -> {
9696
return session.unset(Pac4jConstants.REQUESTED_URL).toOptional()
9797
.map(url -> url.equals("/") ? this.redirectTo : url)
9898
.orElse(this.redirectTo);

0 commit comments

Comments
 (0)