O> parser) { return parser.apply(value()); } } public class ValueSupplier<T> implements Parsable<T> { private final T value; public ValueSupplier(T value) { this.value = value; } @Override public T value() { return value; } }
final Map<String, List<String>> requestParams; public ValueSupplier<Optional<String>> header(String name) { return new ValueSupplier<>(Optional.ofNullable(headers.get(name))); } public ValueSupplier<Optional<String>> param(String name) { ... } } Optional<Long> id = request.param("id").parse(Parsers.asLong); int page = request.param("page").parse(Parsers.asInt).orElse(0); boolean hasIfMatch = request.header("If-Match").value().isPresent(); Map<String, String> form = request.body().parse(Parsers.asForm); int i = request.param("id").parse(optionalString -> Integer.valueOf(optionalString.orElse("0")));