Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions jooby/src/main/java/io/jooby/Context.java
Original file line number Diff line number Diff line change
Expand Up @@ -817,6 +817,19 @@ default Locale locale() {
*/
Value form(@NonNull String name);

/**
* Get a form field that matches the given name.
*
* <p>File upload retrieval is available using {@link Context#file(String)}.
*
* <p>Only for <code>multipart/form-data</code> request.
*
* @param name Field name.
* @param defaultValue Default value.
* @return Multipart value.
*/
Value form(@NonNull String name, @NonNull String defaultValue);

/**
* Convert form data to the given type.
*
Expand Down
5 changes: 5 additions & 0 deletions jooby/src/main/java/io/jooby/DefaultContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,11 @@ default Value form(@NonNull String name) {
return form().get(name);
}

@Override
default Value form(@NonNull String name, @NonNull String defaultValue) {
return form().getOrDefault(name, defaultValue);
}

@Override
default <T> T form(@NonNull Class<T> type) {
return form().to(type);
Expand Down
5 changes: 5 additions & 0 deletions jooby/src/main/java/io/jooby/ForwardingContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -1001,6 +1001,11 @@ public Value form(@NonNull String name) {
return ctx.form(name);
}

@Override
public Value form(@NonNull String name, @NonNull String defaultValue) {
return ctx.form(name, defaultValue);
}

@Override
public <T> T form(@NonNull Class<T> type) {
return ctx.form(type);
Expand Down
6 changes: 6 additions & 0 deletions modules/jooby-apt/src/test/java/tests/i3761/C3761.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
*/
package tests.i3761;

import io.jooby.annotation.FormParam;
import io.jooby.annotation.GET;
import io.jooby.annotation.Path;
import io.jooby.annotation.QueryParam;
Expand All @@ -31,4 +32,9 @@ public String emptySet(@QueryParam("") String emptySet) {
public String string(@QueryParam("Hello") String stringVal) {
return stringVal;
}

@GET("/boolVal")
public boolean bool(@FormParam("false") boolean boolVal) {
return boolVal;
}
}
6 changes: 6 additions & 0 deletions modules/jooby-apt/src/test/java/tests/i3761/C3761Jakarta.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import io.jooby.annotation.Path;
import jakarta.ws.rs.DefaultValue;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.FormParam;

@Path("/3761")
public class C3761Jakarta {
Expand All @@ -32,4 +33,9 @@ public String emptySet(@QueryParam("emptySet") @DefaultValue("") String emptySet
public String string(@QueryParam("stringVal") @DefaultValue("Hello") String stringVal) {
return stringVal;
}

@GET("/boolVal")
public boolean bool(@FormParam("boolVal") @DefaultValue("false") boolean boolVal) {
return boolVal;
}
}
2 changes: 2 additions & 0 deletions modules/jooby-apt/src/test/java/tests/i3761/Issue3761.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,7 @@ private static void assertSourceCodeRespectDefaultValues(String source) {
source.contains("return c.emptySet(ctx.query(\"emptySet\", \"\").value());"));
assertTrue(
source.contains("return c.string(ctx.query(\"stringVal\", \"Hello\").value());"));
assertTrue(
source.contains("return c.bool(ctx.form(\"boolVal\", \"false\").booleanValue());"));
}
}