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>

Reply via email to