<!--
/***************************************************************************************************************************
 * 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.
 ***************************************************************************************************************************/
 -->

RestRequest

<p>
	The {@link oajr.RestRequest} object is an extension of the <l>HttpServletRequest</l> class
	with various built-in convenience methods for use in building REST interfaces.
	It can be accessed by passing it as a parameter on your REST Java method:
</p>
<p class='bpcode w800'>
	<ja>@RestMethod</ja>(...)
	<jk>public</jk> Object myMethod(RestRequest req) {...}			
</p>
<p>
	There are many useful methods on this object, but the main ones are shown below:
</p>
<ul class='javatree'>
	<li class='jc'><c>{@link oajr.RestRequest} <jk>extends</jk> HttpServletRequest</c>
	<ul>
		<li class='jm'>{@link oajr.RestRequest#getHeaders() getHeaders()} - HTTP request headers.
		<li class='jm'>{@link oajr.RestRequest#getQuery() getQuery()} - Query parameters.
		<li class='jm'>{@link oajr.RestRequest#getFormData() getFormData()} - Form-data parameters.
		<li class='jm'>{@link oajr.RestRequest#getBody() getBody()} - HTTP request body.
		<li class='jm'>{@link oajr.RestRequest#getPathMatch() getPathMatch()} - Path match variables.
		<li class='jm'>{@link oajr.RestRequest#getLogger() getLogger()} - Logging.
		<li class='jm'>{@link oajr.RestRequest#getInfoProvider() getInfoProvider()} - Swagger documentation provider.
		<li class='jm'>{@link oajr.RestRequest#getSwagger() getSwagger()} - Generated Swagger information.
		<li class='jm'>{@link oajr.RestRequest#getConfig() getConfig()} - External configuration API.
		<li class='jm'>{@link oajr.RestRequest#getVarResolverSession() getVarResolverSession()} - String variable resolver.
		<li class='jm'>{@link oajr.RestRequest#getMessageBundle() getMessageBundle()} - Localized messages.
		<li class='jm'>{@link oajr.RestRequest#getProperties() getProperties()} - Configuration properties.
		<li class='jm'>{@link oajr.RestRequest#getClasspathReaderResource(String,boolean,MediaType,boolean) getClasspathReaderResource(String,boolean,MediaType,boolean)} - Various methods for retrieving static files from classpath.
	</ul>
</ul>
