diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/toolbox/JSON.java b/acme4j-client/src/main/java/org/shredzone/acme4j/toolbox/JSON.java index e6b8bbae..24ffeafe 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/toolbox/JSON.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/toolbox/JSON.java @@ -277,6 +277,16 @@ public final class JSON implements Serializable { return this; } + /** + * Checks if the value is present. If not, the default value is used instead. + * + * @param def Default value + * @return itself + */ + public Value orElse(Object def) { + return val != null ? this : new Value(path, def); + } + /** * Returns the value as {@link String}. * diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/toolbox/JSONTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/toolbox/JSONTest.java index 4e85646d..8ccf7057 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/toolbox/JSONTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/toolbox/JSONTest.java @@ -237,6 +237,10 @@ public class JSONTest { assertThat(json.get("none").asBinary(), is(nullValue())); assertThat(json.get("none").asProblem(BASE_URL), is(nullValue())); + assertThat(json.get("none").orElse("foo").asString(), is("foo")); + assertThat(json.get("none").orElse(42).asInt(), is(42)); + assertThat(json.get("none").orElse(true).asBoolean(), is(true)); + try { json.get("none").asInt(); fail("asInt did not fail");