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

Java Method Parameters

<p>
	Java methods can contain any of the following parameters in any order:
</p>
<ul class='spaced-list'>
	<li>
		<b>Parameters based on class types:</b>
		<ul class='spaced-list'>
			<li><b>Request/response objects:</b>
				<ul>
					<li class='jc'>{@link oajr.RestRequest} - The request object.
					<li class='jc'>{@link javax.servlet.http.HttpServletRequest} - The superclass of <c>RestRequest</c>.
					<li class='jc'>{@link oajr.RestResponse} - The response object.
					<li class='jc'>{@link javax.servlet.http.HttpServletResponse} - The superclass of <c>RestResponse</c>.
				</ul>
			<li><b>Parsed request header values:</b>
				<ul>
					<li class='jc'>{@link oaj.http.Accept}
					<li class='jc'>{@link oaj.http.AcceptCharset}
					<li class='jc'>{@link oaj.http.AcceptEncoding}
					<li class='jc'>{@link oaj.http.AcceptLanguage}
					<li class='jc'>{@link oaj.http.Authorization}
					<li class='jc'>{@link oaj.http.CacheControl}
					<li class='jc'>{@link oaj.http.Connection}
					<li class='jc'>{@link oaj.http.ContentLength}
					<li class='jc'>{@link oaj.http.ContentType}
					<li class='jc'>{@link oaj.http.Date}
					<li class='jc'>{@link oaj.http.Expect}
					<li class='jc'>{@link oaj.http.From}
					<li class='jc'>{@link oaj.http.Host}
					<li class='jc'>{@link oaj.http.IfMatch}
					<li class='jc'>{@link oaj.http.IfModifiedSince}
					<li class='jc'>{@link oaj.http.IfNoneMatch}
					<li class='jc'>{@link oaj.http.IfRange}
					<li class='jc'>{@link oaj.http.IfUnmodifiedSince}
					<li class='jc'>{@link oaj.http.MaxForwards}
					<li class='jc'>{@link oaj.http.Pragma}
					<li class='jc'>{@link oaj.http.ProxyAuthorization}
					<li class='jc'>{@link oaj.http.Range}
					<li class='jc'>{@link oaj.http.Referer}
					<li class='jc'>{@link oaj.http.TE}
					<li class='jc'>{@link oaj.http.UserAgent}
					<li class='jc'>{@link oaj.http.Upgrade}
					<li class='jc'>{@link oaj.http.Via}
					<li class='jc'>{@link oaj.http.Warning}
					<li class='jc'>{@link java.util.TimeZone}
				</ul>
			<li><b>Direct streams on request/response:</b>
				<ul>
					<li class='jc'>{@link java.io.InputStream}
					<li class='jc'>{@link javax.servlet.ServletInputStream}
					<li class='jc'>{@link java.io.Reader}
					<li class='jc'>{@link java.io.OutputStream}
					<li class='jc'>{@link javax.servlet.ServletOutputStream}
					<li class='jc'>{@link java.io.Writer}
				</ul>
			<li><b>Localization:</b>
				<ul>
					<li class='jc'>{@link java.util.ResourceBundle} - Client-localized resource bundle.
					<li class='jc'>{@link oaj.utils.MessageBundle} - A resource bundle with additional features.
					<li class='jc'>{@link java.util.Locale} - Client locale.
				</ul>
			<li><b>Request APIs:</b>
				<ul>
					<li class='jc'>{@link oajr.RequestHeaders} - API for accessing request headers.
					<li class='jc'>{@link oajr.RequestQuery} - API for accessing request query parameters.
					<li class='jc'>{@link oajr.RequestFormData} - API for accessing request form data.
					<li class='jc'>{@link oajr.RequestPath} - API for accessing path variables.
					<li class='jc'>{@link oajr.RequestBody} - API for accessing request body.
				</ul>
			<li><b>Other:</b>
				<ul>
					<li class='jc'>{@link oaj.http.HttpMethod} - The method name matched (when using <c><ja>@RestMethod</ja>(name=<js>"*"</js>)</c>)
					<li class='jc'>{@link oajr.RestLogger} - Logger with additional features.
					<li class='jc'>{@link oajr.RestContext} - The resource read-only context.
					<li class='jc'>{@link oaj.parser.Parser} - The parser matching the request content type.
					<li class='jc'>{@link oaj.parser.ReaderParser} - The reader parser matching the request content type.
					<li class='jc'>{@link oaj.parser.InputStreamParser} - The input stream parser matching the request content type.
					<li class='jc'>{@link oaj.dto.swagger.Swagger} - The auto-generated Swagger doc.
					<li class='jc'>{@link oaj.config.Config} - The external config for the resource.
					<li class='jc'>{@link oajr.RequestProperties} - API for modifying request-time configuration properties.
				</ul>
		</ul>
	<li><b>Annotated parameters:</b>
		<ul>
			<li class='ja'>{@link oaj.http.annotation.Path} - Variables in matched URL path patterns.
			<li class='ja'>{@link oaj.http.annotation.FormData} - Multipart form post parameter values.
			<li class='ja'>{@link oaj.http.annotation.HasFormData} - Denotes whether the form data parameter exists.
			<li class='ja'>{@link oaj.http.annotation.Query} - Query parameters.  Using this prevents the HTTP body from being processed as a URL-Encoded form post.
			<li class='ja'>{@link oaj.http.annotation.HasQuery} - Denotes whether the query parameter exists.
			<li class='ja'>{@link oaj.http.annotation.Header} - A header value.
			<li class='ja'>{@link oaj.http.annotation.Body} - The HTTP content parsed as a POJO.
			<li class='ja'>{@link oajr.annotation.Method} - The HTTP method name. 
			<li class='ja'>{@link oaj.http.annotation.Request} - HTTP request parts available through a proxy bean interface.
			<li class='ja'>{@link oaj.http.annotation.Response} - HTTP response parts available through a POJO.
			<li class='ja'>{@link oaj.http.annotation.ResponseHeader} - HTTP response header.
			<li class='ja'>{@link oaj.http.annotation.ResponseStatus} - HTTP response status code.
		</ul>
</ul>
<h5 class='figure'>Example:</h5>
<p class='bpcode w800'>
	<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/example1/{a1}/{a2}/{a3}/*"</js>)
	<jk>public</jk> String doGetExample1(
		RestRequest req,
		RestResponse res,
		<ja>@Method</ja> String method,
		<ja>@Path</ja>(<js>"a1"</js>) String a1,
		<ja>@Path</ja>(<js>"a2"</js>) <jk>int</jk> a2,
		<ja>@Path</ja>(<js>"a3"</js>) UUID a3,
		<ja>@Query</ja>(<js>"p1"</js>) <jk>int</jk> p1,
		<ja>@Query</ja>(<js>"p2"</js>) String p2,
		<ja>@Query</ja>(<js>"p3"</js>) UUID p3,
		<ja>@HasQuery</ja>(<js>"p3"</js>) boolean hasP3,
		<ja>@Path</ja>(<js>"/*"</js>) String remainder,
		<ja>@Header</ja>(<js>"Accept-Language"</js>) String lang,
		<ja>@Header</ja>(<js>"Accept"</js>) String accept,
		<ja>@Header</ja>(<js>"DNT"</js>) <jk>int</jk> doNotTrack,
		RequestProperties properties,
		ResourceBundle nls
	) {
		<jc>// Do something with all of those</jc>
	}
</p>
<ul class='notes'>
	<li>All annotations have programmatic equivalents on the {@link oajr.RestRequest} class.
</ul>
<ul class='seealso'>
	<li class='jf'>{@link oajr.RestContext#REST_paramResolvers} - For configuring custom parameter types.
</ul>
