This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 20b7855 Javadocs
20b7855 is described below
commit 20b78554c1a0c1f8e0aa15bb46b24c9c064bc148
Author: JamesBognar <[email protected]>
AuthorDate: Tue Nov 9 12:19:12 2021 -0500
Javadocs
---
.../01.RestmMatchers.html | 70 ++++++++++
.../src/main/javadoc/resources/fragments/toc.html | 9 --
.../apache/juneau/rest/BasicNamedAttribute.java | 13 +-
.../org/apache/juneau/rest/RequestAttribute.java | 40 ++++--
.../org/apache/juneau/rest/RequestAttributes.java | 7 +-
.../org/apache/juneau/rest/RequestFormParam.java | 69 ++++++++--
.../org/apache/juneau/rest/RequestFormParams.java | 3 +-
.../java/org/apache/juneau/rest/RequestHeader.java | 152 +++++++++++++++++++--
.../org/apache/juneau/rest/RequestHeaders.java | 1 +
.../org/apache/juneau/rest/RequestHttpPart.java | 10 +-
.../org/apache/juneau/rest/RequestPathParam.java | 70 ++++++++--
.../org/apache/juneau/rest/RequestPathParams.java | 1 +
.../org/apache/juneau/rest/RequestQueryParam.java | 70 ++++++++--
.../org/apache/juneau/rest/RequestQueryParams.java | 1 +
14 files changed, 457 insertions(+), 59 deletions(-)
diff --git
a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/01.RestmMatchers.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/01.RestmMatchers.html
new file mode 100644
index 0000000..c67eab9
--- /dev/null
+++
b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/01.RestmMatchers.html
@@ -0,0 +1,70 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+
***************************************************************************************************************************/
+ -->
+
+{title:'@RestOp(matchers)', flags:'todo'}
+
+<p>
+ {@link oajr.RestMatcher RestMatchers} are used to allow multiple Java
methods to be
+ tied to the same HTTP method and path, but differentiated by some
request attribute such as a specific
+ header value.
+</p>
+<h5 class='figure'>Example:</h5>
+<p class='bpcode w800'>
+ <jc>// GET method that gets invoked for administrators</jc>
+ <ja>@RestGet</ja>(path=<js>"/*"</js>,
matchers=IsAdminMatcher.<jk>class</jk>)
+ <jk>public</jk> Object doGetForAdmin() {
+ ...
+ }
+
+ <jc>// GET method that gets invoked for everyone else</jc>
+ <ja>@RestGet</ja>(<js>"/*"</js>)
+ <jk>public</jk> Object doGetForEveryoneElse() {
+ ...
+ }
+</p>
+<p>
+ The interface for matchers is simple:
+</p>
+<p class='bpcode w800'>
+ <jk>public class</jk> IsAdminMatcher <jk>extends</jk> RestMatcher {
+
+ <ja>@Override</ja> <jc>/* RestMatcher */</jc>
+ <jk>public boolean</jk> matches(RestRequest <jv>req</jv>) {
+ <jk>return</jk>
<jv>req</jv>.isUserInRole(<js>"ADMINS_GROUP"</js>);
+ }
+ }
+</p>
+
+<ul class='notes'>
+ <li>
+ If no methods are found with a matching matcher, a <l>412
Precondition Failed</l> status is returned.
+ <li>
+ If multiple matchers are specified on the same method, ONLY ONE
matcher needs to match for the
+ method to be invoked.
+ <li>
+ Note that you CANNOT define identical paths on different
methods UNLESS you use matchers.
+ <br>That includes paths that are only different in variable
names (e.g. <l>"/foo/{bar}"</l> and
+ <l>"/foo/{baz}"</l>).
+ <br>If you try to do so, a <l>ServletException</l> will be
thrown on startup.
+ <li>
+ Methods with matchers take precedence over methods without.
+ <br>Otherwise, methods are attempted in the order they appear
in the class.
+</ul>
+
+<ul class='seealso'>
+ <li class='ja'>{@link oajr.annotation.RestOp#matchers RestOp(matchers)}
+ <li class='jc'>{@link oajr.matchers.MultipartFormDataMatcher}
+ <li class='jc'>{@link oajr.matchers.UrlEncodedFormMatcher}
+</ul>
diff --git a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
index 067a8bd..e59e29d 100644
--- a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
+++ b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
@@ -203,16 +203,7 @@
</ol>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods'>@RestOp-Annotated
Methods</a><span class='update'>updated: <b>9.0.0</b></span></p>
<ol>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders'>RequestHeaders</a><span
class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes'>RequestAttributes</a><span
class='update'>created: 8.1.0, <b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery'>RequestQuery</a><span
class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFormData'>RequestFormData</a><span
class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestPathMatch'>RequestPathMatch</a><span
class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource'>ReaderResource</a><span
class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmStreamResource'>StreamResource</a><span
class='update'><b><red>todo</red></b></span></p>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmMatchers'>@RestOp(matchers)</a><span
class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedResponses'>Predefined
Responses</a><span class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedHelperBeans'>Predefined
Helper Beans</a><span class='update'><b><red>todo</red></b></span></p>
</ol>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.RestRpc'>REST/RPC</a><span
class='update'>updated: 8.0.0, <b><red>todo</red></b></span></p>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.RestOpenApiSchemaPartParsing'>OpenAPI
Schema Part Parsing</a><span class='update'><b><red>todo</red></b></span></p>
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicNamedAttribute.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicNamedAttribute.java
index ced3dc4..3eaf8d0 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicNamedAttribute.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicNamedAttribute.java
@@ -27,8 +27,10 @@ import org.apache.juneau.http.part.*;
*/
@BeanIgnore
public class BasicNamedAttribute implements NamedAttribute {
- private final String name;
- private final Object value;
+
+
//-----------------------------------------------------------------------------------------------------------------
+ // Static
+
//-----------------------------------------------------------------------------------------------------------------
/**
* Static creator.
@@ -72,6 +74,13 @@ public class BasicNamedAttribute implements NamedAttribute {
return new BasicNamedAttribute(name, value);
}
+
//-----------------------------------------------------------------------------------------------------------------
+ // Instance
+
//-----------------------------------------------------------------------------------------------------------------
+
+ private final String name;
+ private final Object value;
+
/**
* Constructor.
*
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttribute.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttribute.java
index 8cd2202..b03e1f7 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttribute.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttribute.java
@@ -21,6 +21,38 @@ import org.apache.juneau.http.response.*;
/**
* Represents a single request attribute on an HTTP request.
+ *
+ * <p>
+ * Typically accessed through the {@link RequestAttributes} class.
+ *
+ * <p>
+ * Some important methods on this class are:
+ * </p>
+ * <ul class='javatree'>
+ * <li class='jc'>{@link RequestAttribute}
+ * <ul class='spaced-list'>
+ * <li>Methods for retrieving simple string values:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestAttribute#asString()
asString()}
+ * <li class='jm'>{@link RequestAttribute#get() get()}
+ * <li class='jm'>{@link RequestAttribute#isPresent()
isPresent()}
+ * <li class='jm'>{@link RequestAttribute#orElse(Object)
orElse(Object)}
+ * </ul>
+ * <li>Methods for retrieving as custom types:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestAttribute#as(Class)
as(Class)}
+ * </ul>
+ * <li>Methods for performing assertion checks:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestAttribute#assertName()
assertName()}
+ * <li class='jm'>{@link RequestAttribute#assertValue()
assertValue()}
+ * </ul>
+ * <li>Other methods:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestAttribute#getName()
getName()}
+ * <li class='jm'>{@link RequestAttribute#getValue()
getValue()}
+* </ul>
+ * </ul>
*/
public class RequestAttribute extends BasicNamedAttribute {
@@ -62,12 +94,4 @@ public class RequestAttribute extends BasicNamedAttribute {
public <T> Optional<T> as(Class<T> type) {
return
ofNullable(req.getBeanSession().convertToType(getValue(), type));
}
-
-
//------------------------------------------------------------------------------------------------------------------
- // Header passthrough methods.
-
//------------------------------------------------------------------------------------------------------------------
-
- // <FluentSetters>
-
- // </FluentSetters>
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttributes.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttributes.java
index 1a75c11..d05e416 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttributes.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestAttributes.java
@@ -26,8 +26,7 @@ import org.apache.juneau.svl.*;
*
* <p>
* The {@link RequestAttributes} object is the API for accessing the
standard servlet attributes on an HTTP request
- * (i.e. {@link javax.servlet.ServletRequest#getAttribute(String)}.
- * It wraps the request attributes in a {@link java.util.Map} interface
and provides several convenience methods.
+ * (i.e. {@link javax.servlet.ServletRequest#getAttribute(String)}).
* </p>
*
* <p class='bcode w800'>
@@ -83,6 +82,10 @@ import org.apache.juneau.svl.*;
* Modifications made to request attributes through the
<c>RequestAttributes</c> bean are automatically reflected in
* the underlying servlet request attributes making it possible to mix the
usage of both APIs.
* </p>
+ *
+ * <ul class='seealso'>
+ * <li class='jc'>{@link RequestAttribute}
+ * </ul>
*/
public class RequestAttributes {
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParam.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParam.java
index f7501a7..b64d40b 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParam.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParam.java
@@ -16,14 +16,74 @@ import static org.apache.juneau.httppart.HttpPartType.*;
import static org.apache.juneau.internal.ThrowableUtils.*;
import java.io.*;
+import java.lang.reflect.*;
+import java.util.regex.*;
import org.apache.http.*;
+import org.apache.juneau.*;
import org.apache.juneau.assertions.*;
import org.apache.juneau.httppart.*;
import org.apache.juneau.internal.*;
/**
* Represents a single form-data parameter on an HTTP request.
+ *
+ * <p>
+ * Typically accessed through the {@link RequestFormParams} class.
+ *
+ * <p>
+ * Some important methods on this class are:
+ * </p>
+ * <ul class='javatree'>
+ * <li class='jc'>{@link RequestFormParam}
+ * <ul class='spaced-list'>
+ * <li>Methods for retrieving simple string values:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestFormParam#asString()
asString()}
+ * <li class='jm'>{@link RequestFormParam#get() get()}
+ * <li class='jm'>{@link RequestFormParam#isPresent()
isPresent()}
+ * <li class='jm'>{@link RequestFormParam#orElse(String)
orElse(String)}
+ * </ul>
+ * <li>Methods for retrieving as other common types:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestFormParam#asBoolean()
asBoolean()}
+ * <li class='jm'>{@link RequestFormParam#asBooleanPart()
asBooleanPart()}
+ * <li class='jm'>{@link RequestFormParam#asCsvArray()
asCsvArray()}
+ * <li class='jm'>{@link RequestFormParam#asCsvArrayPart()
asCsvArrayPart()}
+ * <li class='jm'>{@link RequestFormParam#asDate()
asDate()}
+ * <li class='jm'>{@link RequestFormParam#asDatePart()
asDatePart()}
+ * <li class='jm'>{@link RequestFormParam#asInteger()
asInteger()}
+ * <li class='jm'>{@link RequestFormParam#asIntegerPart()
asIntegerPart()}
+ * <li class='jm'>{@link RequestFormParam#asLong()
asLong()}
+ * <li class='jm'>{@link RequestFormParam#asLongPart()
asLongPart()}
+ * <li class='jm'>{@link
RequestFormParam#asMatcher(Pattern) asMatcher(Pattern)}
+ * <li class='jm'>{@link
RequestFormParam#asMatcher(String) asMatcher(String)}
+ * <li class='jm'>{@link
RequestFormParam#asMatcher(String,int) asMatcher(String,int)}
+ * <li class='jm'>{@link RequestFormParam#asStringPart()
asStringPart()}
+ * <li class='jm'>{@link RequestFormParam#asUriPart()
asUriPart()}
+ * </ul>
+ * <li>Methods for retrieving as custom types:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestFormParam#as(Class)
as(Class)}
+ * <li class='jm'>{@link RequestFormParam#as(ClassMeta)
as(ClassMeta)}
+ * <li class='jm'>{@link RequestFormParam#as(Type,Type...)
as(Type,Type...)}
+ * <li class='jm'>{@link
RequestFormParam#parser(HttpPartParserSession) parser(HttpPartParserSession)}
+ * <li class='jm'>{@link
RequestFormParam#schema(HttpPartSchema) schema(HttpPartSchema)}
+ * </ul>
+ * <li>Methods for performing assertion checks:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestFormParam#assertCsvArray()
assertCsvArray()}
+ * <li class='jm'>{@link RequestFormParam#assertDate()
assertDate()}
+ * <li class='jm'>{@link RequestFormParam#assertInteger()
assertInteger()}
+ * <li class='jm'>{@link RequestFormParam#assertLong()
assertLong()}
+ * <li class='jm'>{@link RequestFormParam#assertString()
assertString()}
+ * </ul>
+ * <li>Other methods:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestFormParam#getName()
getName()}
+ * <li class='jm'>{@link RequestFormParam#getValue()
getValue()}
+* </ul>
+ * </ul>
*/
public class RequestFormParam extends RequestHttpPart implements NameValuePair
{
@@ -162,15 +222,6 @@ public class RequestFormParam extends RequestHttpPart
implements NameValuePair {
return new
FluentListAssertion<>(asCsvArrayPart().asList().orElse(null), this);
}
-
//------------------------------------------------------------------------------------------------------------------
- // Header passthrough methods.
-
//------------------------------------------------------------------------------------------------------------------
-
- @Override /* Object */
- public String toString() {
- return getName() + "=" + getValue();
- }
-
// <FluentSetters>
@Override /* GENERATED */
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParams.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParams.java
index bf5dfff..662ecc8 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParams.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormParams.java
@@ -54,7 +54,7 @@ import org.apache.juneau.utils.*;
*
* <jc>// Get query parameters converted to various types.</jc>
* <jk>int</jk> <jv>p1</jv> =
<jv>formData</jv>.get(<js>"p1"</js>).asInteger().orElse(0);
- * String <jv>p2</jv> =
<jv>formData<jv>.get(<js>"p2"</js>).orElse(<jk>null</jk>);
+ * String <jv>p2</jv> =
<jv>formData</jv>.get(<js>"p2"</js>).orElse(<jk>null</jk>);
* UUID <jv>p3</jv> =
<jv>formData</jv>.get(<js>"p3"</js>).as(UUID.<jk>class</jk>).orElse(<jk>null</jk>);
* }
* </p>
@@ -104,6 +104,7 @@ import org.apache.juneau.utils.*;
* </ul>
*
* <ul class='seealso'>
+ * <li class='jc'>{@link RequestFormParam}
* <li class='ja'>{@link org.apache.juneau.http.annotation.FormData}
* <li class='ja'>{@link org.apache.juneau.http.annotation.HasFormData}
* </ul>
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeader.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeader.java
index da96423..cc86a10 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeader.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeader.java
@@ -14,18 +14,83 @@ package org.apache.juneau.rest;
import static org.apache.juneau.httppart.HttpPartType.*;
+import java.lang.reflect.*;
+import java.util.regex.*;
+
import org.apache.http.*;
+import org.apache.juneau.*;
+import org.apache.juneau.assertions.*;
import org.apache.juneau.http.header.*;
import org.apache.juneau.http.response.BasicHttpException;
import org.apache.juneau.httppart.*;
-import org.apache.juneau.rest.assertions.*;
/**
* Represents a single header on an HTTP request.
+ *
+ * <p>
+ * Typically accessed through the {@link RequestHeaders} class.
+ *
+ * <p>
+ * Some important methods on this class are:
+ * </p>
+ * <ul class='javatree'>
+ * <li class='jc'>{@link RequestHeader}
+ * <ul class='spaced-list'>
+ * <li>Methods for retrieving simple string values:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestHeader#asString()
asString()}
+ * <li class='jm'>{@link RequestHeader#get() get()}
+ * <li class='jm'>{@link RequestHeader#isPresent()
isPresent()}
+ * <li class='jm'>{@link RequestHeader#orElse(String)
orElse(String)}
+ * </ul>
+ * <li>Methods for retrieving as other common types:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestHeader#asBoolean()
asBoolean()}
+ * <li class='jm'>{@link RequestHeader#asBooleanHeader()
asBooleanHeader()}
+ * <li class='jm'>{@link RequestHeader#asCsvArray()
asCsvArray()}
+ * <li class='jm'>{@link RequestHeader#asCsvArrayHeader()
asCsvArrayHeader()}
+ * <li class='jm'>{@link RequestHeader#asDate() asDate()}
+ * <li class='jm'>{@link RequestHeader#asDateHeader()
asDateHeader()}
+ * <li class='jm'>{@link
RequestHeader#asEntityTagArrayHeader() asEntityTagArrayHeader()}
+ * <li class='jm'>{@link RequestHeader#asEntityTagHeader()
asEntityTagHeader()}
+ * <li class='jm'>{@link RequestHeader#asInteger()
asInteger()}
+ * <li class='jm'>{@link RequestHeader#asIntegerHeader()
asIntegerHeader()}
+ * <li class='jm'>{@link RequestHeader#asLong() asLong()}
+ * <li class='jm'>{@link RequestHeader#asLongHeader()
asLongHeader()}
+ * <li class='jm'>{@link RequestHeader#asMatcher(Pattern)
asMatcher(Pattern)}
+ * <li class='jm'>{@link RequestHeader#asMatcher(String)
asMatcher(String)}
+ * <li class='jm'>{@link
RequestHeader#asMatcher(String,int) asMatcher(String,int)}
+ * <li class='jm'>{@link RequestHeader#asStringHeader()
asStringHeader()}
+ * <li class='jm'>{@link
RequestHeader#asStringRangeArrayHeader() asStringRangeArrayHeader()}
+ * <li class='jm'>{@link RequestHeader#asUriHeader()
asUriHeader()}
+ * </ul>
+ * <li>Methods for retrieving as custom types:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestHeader#as(Class) as(Class)}
+ * <li class='jm'>{@link RequestHeader#as(ClassMeta)
as(ClassMeta)}
+ * <li class='jm'>{@link RequestHeader#as(Type,Type...)
as(Type,Type...)}
+ * <li class='jm'>{@link
RequestHeader#parser(HttpPartParserSession) parser(HttpPartParserSession)}
+ * <li class='jm'>{@link
RequestHeader#schema(HttpPartSchema) schema(HttpPartSchema)}
+ * </ul>
+ * <li>Methods for performing assertion checks:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestHeader#assertCsvArray()
assertCsvArray()}
+ * <li class='jm'>{@link RequestHeader#assertDate()
assertDate()}
+ * <li class='jm'>{@link RequestHeader#assertInteger()
assertInteger()}
+ * <li class='jm'>{@link RequestHeader#assertLong()
assertLong()}
+ * <li class='jm'>{@link RequestHeader#assertString()
assertString()}
+ * </ul>
+ * <li>Other methods:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestHeader#getName() getName()}
+ * <li class='jm'>{@link RequestHeader#getValue()
getValue()}
+* </ul>
+ * </ul>
*/
public class RequestHeader extends RequestHttpPart implements Header {
private final String value;
+
/**
* Constructor.
*
@@ -142,24 +207,93 @@ public class RequestHeader extends RequestHttpPart
implements Header {
//------------------------------------------------------------------------------------------------------------------
/**
- * Provides the ability to perform fluent-style assertions on this
request header.
+ * Provides the ability to perform fluent-style assertions on this
parameter.
*
* <h5 class='section'>Examples:</h5>
* <p class='bcode w800'>
* <jv>request</jv>
- * .getHeader(<js>"Content-Type"</js>)
- * .assertValue().is(<js>"application/json"</js>);
+ * .getHeader(<js>"foo"</js>)
+ * .assertString().contains(<js>"bar"</js>);
+ * </p>
+ *
+ * <p>
+ * The assertion test returns the original object allowing you to chain
multiple requests like so:
+ * <p class='bcode w800'>
+ * String <jv>foo</jv> = <jv>request</jv>
+ * .getHeader(<js>"foo"</js>)
+ * .assertString().contains(<js>"bar"</js>)
+ * .asString().get();
* </p>
*
* @return A new fluent assertion object.
*/
- public FluentRequestHeaderAssertion<RequestHeader> assertValue() {
- return new FluentRequestHeaderAssertion<>(this, this);
+ public FluentStringAssertion<RequestHeader> assertString() {
+ return new FluentStringAssertion<>(orElse(null), this);
}
-
//------------------------------------------------------------------------------------------------------------------
- // Header passthrough methods.
-
//------------------------------------------------------------------------------------------------------------------
+ /**
+ * Provides the ability to perform fluent-style assertions on an
integer parameter.
+ *
+ * <h5 class='section'>Examples:</h5>
+ * <p class='bcode w800'>
+ * <jv>request</jv>
+ * .getHeader(<js>"age"</js>)
+ * .assertInteger().isGreaterThan(1);
+ * </p>
+ *
+ * @return A new fluent assertion object.
+ */
+ public FluentIntegerAssertion<RequestHeader> assertInteger() {
+ return new
FluentIntegerAssertion<>(asIntegerPart().asInteger().orElse(null), this);
+ }
+
+ /**
+ * Provides the ability to perform fluent-style assertions on a long
parameter.
+ *
+ * <h5 class='section'>Examples:</h5>
+ * <p class='bcode w800'>
+ * <jv>request</jv>
+ * .getHeader(<js>"length"</js>)
+ * .assertLong().isLessThan(100000);
+ * </p>
+ *
+ * @return A new fluent assertion object.
+ */
+ public FluentLongAssertion<RequestHeader> assertLong() {
+ return new
FluentLongAssertion<>(asLongPart().asLong().orElse(null), this);
+ }
+
+ /**
+ * Provides the ability to perform fluent-style assertions on a date
parameter.
+ *
+ * <h5 class='section'>Examples:</h5>
+ * <p class='bcode w800'>
+ * <jv>request</jv>
+ * .getHeader(<js>"time"</js>)
+ * .assertDate().isAfterNow();
+ * </p>
+ *
+ * @return A new fluent assertion object.
+ */
+ public FluentZonedDateTimeAssertion<RequestHeader> assertDate() {
+ return new
FluentZonedDateTimeAssertion<>(asDatePart().asZonedDateTime().orElse(null),
this);
+ }
+
+ /**
+ * Provides the ability to perform fluent-style assertions on
comma-separated string parameters.
+ *
+ * <h5 class='section'>Examples:</h5>
+ * <p class='bcode w800'>
+ * <jv>request</jv>
+ * .getHeader(<js>"allow"</js>)
+ * .assertCsvArray().contains(<js>"GET"</js>);
+ * </p>
+ *
+ * @return A new fluent assertion object.
+ */
+ public FluentListAssertion<String,RequestHeader> assertCsvArray() {
+ return new
FluentListAssertion<>(asCsvArrayPart().asList().orElse(null), this);
+ }
/**
* Parses the value.
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
index ea101a2..a3f0779 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
@@ -102,6 +102,7 @@ import org.apache.juneau.http.header.*;
* Entries are stored in a case-insensitive map unless overridden via the
constructor.
*
* <ul class='seealso'>
+ * <li class='jc'>{@link RequestHeader}
* <li class='ja'>{@link org.apache.juneau.http.annotation.Header}
* </ul>
*/
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHttpPart.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHttpPart.java
index e6784f6..8ab501a 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHttpPart.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHttpPart.java
@@ -31,6 +31,14 @@ import org.apache.juneau.reflect.*;
/**
* Represents a single HTTP part on an HTTP request.
+ *
+ * Parent of the following classes:
+ * <ul class='javatreec'>
+ * <li class='jc'>{@link RequestHeader}
+ * <li class='jc'>{@link RequestQueryParam}
+ * <li class='jc'>{@link RequestFormParam}
+ * <li class='jc'>{@link RequestPathParam}
+ * </ul>
*/
@FluentSetters
public abstract class RequestHttpPart {
@@ -425,7 +433,7 @@ public abstract class RequestHttpPart {
@Override /* Object */
public String toString() {
- return getName() + ": " + getValue();
+ return getName() + "=" + getValue();
}
// <FluentSetters>
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParam.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParam.java
index 8afedf7..d0e8e6d 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParam.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParam.java
@@ -14,12 +14,73 @@ package org.apache.juneau.rest;
import static org.apache.juneau.httppart.HttpPartType.*;
+import java.lang.reflect.*;
+import java.util.regex.*;
+
import org.apache.http.*;
+import org.apache.juneau.*;
import org.apache.juneau.assertions.*;
import org.apache.juneau.httppart.*;
/**
* Represents a single path parameter on an HTTP request.
+ *
+ * <p>
+ * Typically accessed through the {@link RequestPathParams} class.
+ *
+ * <p>
+ * Some important methods on this class are:
+ * </p>
+ * <ul class='javatree'>
+ * <li class='jc'>{@link RequestPathParam}
+ * <ul class='spaced-list'>
+ * <li>Methods for retrieving simple string values:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestPathParam#asString()
asString()}
+ * <li class='jm'>{@link RequestPathParam#get() get()}
+ * <li class='jm'>{@link RequestPathParam#isPresent()
isPresent()}
+ * <li class='jm'>{@link RequestPathParam#orElse(String)
orElse(String)}
+ * </ul>
+ * <li>Methods for retrieving as other common types:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestPathParam#asBoolean()
asBoolean()}
+ * <li class='jm'>{@link RequestPathParam#asBooleanPart()
asBooleanPart()}
+ * <li class='jm'>{@link RequestPathParam#asCsvArray()
asCsvArray()}
+ * <li class='jm'>{@link RequestPathParam#asCsvArrayPart()
asCsvArrayPart)}
+ * <li class='jm'>{@link RequestPathParam#asDate()
asDate()}
+ * <li class='jm'>{@link RequestPathParam#asDatePart()
asDatePart()}
+ * <li class='jm'>{@link RequestPathParam#asInteger()
asInteger()}
+ * <li class='jm'>{@link RequestPathParam#asIntegerPart()
asIntegerPart()}
+ * <li class='jm'>{@link RequestPathParam#asLong()
asLong()}
+ * <li class='jm'>{@link RequestPathParam#asLongPart()
asLongPart()}
+ * <li class='jm'>{@link
RequestPathParam#asMatcher(Pattern) asMatcher(Pattern)}
+ * <li class='jm'>{@link
RequestPathParam#asMatcher(String) asMatcher(String)}
+ * <li class='jm'>{@link
RequestPathParam#asMatcher(String,int) asMatcher(String,int)}
+ * <li class='jm'>{@link RequestPathParam#asStringPart()
asStringPart()}
+ * <li class='jm'>{@link RequestPathParam#asUriPart()
asUriPart()}
+ * </ul>
+ * <li>Methods for retrieving as custom types:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestPathParam#as(Class)
as(Class)}
+ * <li class='jm'>{@link RequestPathParam#as(ClassMeta)
as(ClassMeta)}
+ * <li class='jm'>{@link RequestPathParam#as(Type,Type...)
as(Type,Type...)}
+ * <li class='jm'>{@link
RequestPathParam#parser(HttpPartParserSession) parser(HttpPartParserSession)}
+ * <li class='jm'>{@link
RequestPathParam#schema(HttpPartSchema) schema(HttpPartSchema)}
+ * </ul>
+ * <li>Methods for performing assertion checks:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestPathParam#assertCsvArray()
assertCsvArray()}
+ * <li class='jm'>{@link RequestPathParam#assertDate()
assertDate()}
+ * <li class='jm'>{@link RequestPathParam#assertInteger()
assertInteger()}
+ * <li class='jm'>{@link RequestPathParam#assertLong()
assertLong()}
+ * <li class='jm'>{@link RequestPathParam#assertString()
assertString()}
+ * </ul>
+ * <li>Other methods:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestPathParam#getName()
getName()}
+ * <li class='jm'>{@link RequestPathParam#getValue()
getValue()}
+* </ul>
+ * </ul>
*/
public class RequestPathParam extends RequestHttpPart implements NameValuePair
{
@@ -139,15 +200,6 @@ public class RequestPathParam extends RequestHttpPart
implements NameValuePair {
return new
FluentListAssertion<>(asCsvArrayPart().asList().orElse(null), this);
}
-
//------------------------------------------------------------------------------------------------------------------
- // Header passthrough methods.
-
//------------------------------------------------------------------------------------------------------------------
-
- @Override /* Object */
- public String toString() {
- return getName() + "=" + getValue();
- }
-
// <FluentSetters>
@Override /* GENERATED */
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParams.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParams.java
index 8f0eee3..9904dc3 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParams.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPathParams.java
@@ -94,6 +94,7 @@ import org.apache.juneau.http.*;
* </ul>
*
* <ul class='seealso'>
+ * <li class='jc'>{@link RequestPathParam}
* <li class='ja'>{@link org.apache.juneau.http.annotation.Path}
* </ul>
*/
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParam.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParam.java
index a664167..9916770 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParam.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParam.java
@@ -14,12 +14,73 @@ package org.apache.juneau.rest;
import static org.apache.juneau.httppart.HttpPartType.*;
+import java.lang.reflect.*;
+import java.util.regex.*;
+
import org.apache.http.*;
+import org.apache.juneau.*;
import org.apache.juneau.assertions.*;
import org.apache.juneau.httppart.*;
/**
* Represents a single query parameter on an HTTP request.
+ *
+ * <p>
+ * Typically accessed through the {@link RequestQueryParams} class.
+ *
+ * <p>
+ * Some important methods on this class are:
+ * </p>
+ * <ul class='javatree'>
+ * <li class='jc'>{@link RequestQueryParam}
+ * <ul class='spaced-list'>
+ * <li>Methods for retrieving simple string values:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestQueryParam#asString()
asString()}
+ * <li class='jm'>{@link RequestQueryParam#get() get()}
+ * <li class='jm'>{@link RequestQueryParam#isPresent()
isPresent()}
+ * <li class='jm'>{@link RequestQueryParam#orElse(String)
orElse(String)}
+ * </ul>
+ * <li>Methods for retrieving as other common types:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestQueryParam#asBoolean()
asBoolean()}
+ * <li class='jm'>{@link RequestQueryParam#asBooleanPart()
asBooleanPart()}
+ * <li class='jm'>{@link RequestQueryParam#asCsvArray()
asCsvArray()}
+ * <li class='jm'>{@link
RequestQueryParam#asCsvArrayPart() asCsvArrayPart()}
+ * <li class='jm'>{@link RequestQueryParam#asDate()
asDate()}
+ * <li class='jm'>{@link RequestQueryParam#asDatePart()
asDatePart()}
+ * <li class='jm'>{@link RequestQueryParam#asInteger()
asInteger()}
+ * <li class='jm'>{@link RequestQueryParam#asIntegerPart()
asIntegerPart()}
+ * <li class='jm'>{@link RequestQueryParam#asLong()
asLong()}
+ * <li class='jm'>{@link RequestQueryParam#asLongPart()
asLongPart()}
+ * <li class='jm'>{@link
RequestQueryParam#asMatcher(Pattern) asMatcher(Pattern)}
+ * <li class='jm'>{@link
RequestQueryParam#asMatcher(String) asMatcher(String)}
+ * <li class='jm'>{@link
RequestQueryParam#asMatcher(String,int) asMatcher(String,int)}
+ * <li class='jm'>{@link RequestQueryParam#asStringPart()
asStringPart()}
+ * <li class='jm'>{@link RequestQueryParam#asUriPart()
asUriPart()}
+ * </ul>
+ * <li>Methods for retrieving as custom types:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestQueryParam#as(Class)
as(Class)}
+ * <li class='jm'>{@link RequestQueryParam#as(ClassMeta)
as(ClassMeta)}
+ * <li class='jm'>{@link
RequestQueryParam#as(Type,Type...) as(Type,Type...)}
+ * <li class='jm'>{@link
RequestQueryParam#parser(HttpPartParserSession) parser(HttpPartParserSession)}
+ * <li class='jm'>{@link
RequestQueryParam#schema(HttpPartSchema) schema(HttpPartSchema)}
+ * </ul>
+ * <li>Methods for performing assertion checks:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link
RequestQueryParam#assertCsvArray() assertCsvArray()}
+ * <li class='jm'>{@link RequestQueryParam#assertDate()
assertDate()}
+ * <li class='jm'>{@link RequestQueryParam#assertInteger()
assertInteger()}
+ * <li class='jm'>{@link RequestQueryParam#assertLong()
assertLong()}
+ * <li class='jm'>{@link RequestQueryParam#assertString()
assertString()}
+ * </ul>
+ * <li>Other methods:
+ * <ul class='javatreec'>
+ * <li class='jm'>{@link RequestQueryParam#getName()
getName()}
+ * <li class='jm'>{@link RequestQueryParam#getValue()
getValue()}
+* </ul>
+ * </ul>
*/
public class RequestQueryParam extends RequestHttpPart implements
NameValuePair {
@@ -139,15 +200,6 @@ public class RequestQueryParam extends RequestHttpPart
implements NameValuePair
return new
FluentListAssertion<>(asCsvArrayPart().asList().orElse(null), this);
}
-
//------------------------------------------------------------------------------------------------------------------
- // Header passthrough methods.
-
//------------------------------------------------------------------------------------------------------------------
-
- @Override /* Object */
- public String toString() {
- return getName() + "=" + getValue();
- }
-
// <FluentSetters>
@Override /* GENERATED */
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParams.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParams.java
index 1296f2a..15baefa 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParams.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQueryParams.java
@@ -106,6 +106,7 @@ import org.apache.juneau.http.part.*;
* Entries are stored in a case-sensitive map unless overridden via the
constructor.
*
* <ul class='seealso'>
+ * <li class='jc'>{@link RequestQueryParam}
* <li class='ja'>{@link org.apache.juneau.http.annotation.Query}
* <li class='ja'>{@link org.apache.juneau.http.annotation.HasQuery}
* </ul>