summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorn.christian@seime.no>2024-03-12 08:07:38 +0100
committerGitHub <noreply@github.com>2024-03-12 08:07:38 +0100
commit6e80e4507e748af823dd852253c0cfa98663d6a2 (patch)
tree854b06115a1de5ec9a230d96b981ea9594aea0b8
parent3de0460b18304c733effe35b763f73b48db5ba7f (diff)
parent76d95842f2adcfd2c91682fc099f61fa2f364055 (diff)
Merge pull request #30584 from vespa-engine/bjorncs/restapi
Misc improvements to `RestApi`
-rw-r--r--container-core/src/main/java/com/yahoo/restapi/RestApi.java17
-rw-r--r--container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java1
2 files changed, 10 insertions, 8 deletions
diff --git a/container-core/src/main/java/com/yahoo/restapi/RestApi.java b/container-core/src/main/java/com/yahoo/restapi/RestApi.java
index ee5628988c9..69cbf48cb1b 100644
--- a/container-core/src/main/java/com/yahoo/restapi/RestApi.java
+++ b/container-core/src/main/java/com/yahoo/restapi/RestApi.java
@@ -15,12 +15,11 @@ import com.yahoo.security.tls.ConnectionAuthContext;
import javax.net.ssl.SSLSession;
import java.io.InputStream;
+import java.math.BigDecimal;
import java.net.InetSocketAddress;
import java.security.Principal;
import java.util.List;
import java.util.Optional;
-import java.util.OptionalDouble;
-import java.util.OptionalLong;
/**
* Rest API routing and response serialization
@@ -149,6 +148,8 @@ public interface RestApi {
/** Scheme, domain and port, for the original request. <em>Use this only for generating resources links, not for custom routing!</em> */
// TODO: this needs to include path and query as well, to be useful for generating resource links that need not be rewritten.
HttpURL baseRequestURL();
+ /** Full URL of the request */
+ HttpURL url();
AclMapping.Action aclAction();
Optional<Principal> userPrincipal();
Principal userPrincipalOrThrow();
@@ -161,14 +162,14 @@ public interface RestApi {
String getStringOrThrow(String name);
default Optional<Boolean> getBoolean(String name) { return getString(name).map(Boolean::valueOf);}
default boolean getBooleanOrThrow(String name) { return Boolean.parseBoolean(getStringOrThrow(name)); }
- default OptionalLong getLong(String name) {
- return getString(name).map(Long::parseLong).map(OptionalLong::of).orElseGet(OptionalLong::empty);
- }
+ default Optional<Long> getLong(String name) { return getString(name).map(Long::parseLong); }
default long getLongOrThrow(String name) { return Long.parseLong(getStringOrThrow(name)); }
- default OptionalDouble getDouble(String name) {
- return getString(name).map(Double::parseDouble).map(OptionalDouble::of).orElseGet(OptionalDouble::empty);
- }
+ default Optional<Double> getDouble(String name) { return getString(name).map(Double::parseDouble); }
+ default int getIntegerOrThrow(String name) { return Integer.parseInt(getStringOrThrow(name)); }
+ default Optional<Integer> getInteger(String name) { return getString(name).map(Integer::parseInt); }
default double getDoubleOrThrow(String name) { return Double.parseDouble(getStringOrThrow(name)); }
+ default BigDecimal getBigDecimalOrThrow(String name) { return new BigDecimal(getStringOrThrow(name)); }
+ default Optional<BigDecimal> getBigDecimal(String name) { return getString(name).map(BigDecimal::new); }
}
interface PathParameters extends Parameters {
diff --git a/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java b/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
index a381fd3c9a6..56e7f4e3098 100644
--- a/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
+++ b/container-core/src/main/java/com/yahoo/restapi/RestApiImpl.java
@@ -479,6 +479,7 @@ class RestApiImpl implements RestApi {
}
return HttpURL.from(URI.create(sb.toString()));
}
+ @Override public HttpURL url() { return HttpURL.from(request.getUri()); }
@Override public AclMapping.Action aclAction() { return aclAction; }
@Override public Optional<Principal> userPrincipal() {
return Optional.ofNullable(request.getJDiscRequest().getUserPrincipal());