anchor.diff:  The following classes can also be used directly in controller methods, but can not be used as a request or query parameter
   
   -------------------------------------------
  +Request
  +Session
   Form
  +Flash
   Authentication
  -Session
  -Flash
   Body
  -Request
   -------------------------------------------
   
  -=== Special parameter
  -
  -TBD
  -
  -=== ETag for dynamic content
  -
  -"ETag" or "entity tag" enables web application to make use of cached resources by allowing conditional requests from the client.
  -This is widely used for static resources like CSS or JS files.
  -
  -mangoo I/O offers this functionality for dynamic content as well. To make use of an entity tag, simply add the
  -following method at the returning response in your controller method.
  -
  -[NOTE]
  -If you are using a front-end HTTP server, please check the documentation on how it
  -handles ETag, as the popular nginx web server https://thinkingandcomputing.com/2014/09/27/enable-etag-nginx-resources-sent-gzip/[deliberately strips ETags] once gzip is applied.
  -
  -[source,java]
  ------------------------------
  -public Response index() {
  -    return Response.withOk().andETag();
  -}
  ------------------------------
  -
  -For more information on how ETag works, click https://en.wikipedia.org/wiki/HTTP_ETag[here].
  -
  -=== Administrative URLs
  -
  -mangoo I/O offers administrative URLs, which enables you to check certain application information via a web interface. The
  -following administrative URLs are available
  -
  +=== Request
  +
  +The request class is a special object which can be passed into a controller method. It enables you
  +access to header and URL values a long with additional information about the request. To gain
  +access to the request object, simply pass it to your controller method.
  +
  +[source,java]
   -------------------------------------------
  -/@routes
  -/@config
  -/@cache
  -/@health
  +public Response index(Request request) {
  +    //Do something useful with the request
  +    return Response.withOk();
  +}
   -------------------------------------------
   
  -[NOTE]
  -By default, the administrative URLs are enabled in dev mode and disabled in test and prod mode. You
  -can enable each administrative URL by setting the appropriate configuration value in your application.yaml.
  -see <<Configuration options>> for more information on this.
  -
  -==== /@routes
  -
  -Displays a list of all configured routes and their corresponding controllers and methods.
  -
  -==== /@config
  -
  -Displays a list of all configured properties and their corresponding values.
  -
  -[WARNING]
  -For security reasons the properties "application.secret", "smtp.username" and "smtp.password" is not available via the @config route.
  -
  -==== /@cache
  -
  -Displays a list of cache statistics including cache hits, cache misses, etc.
  -
  -==== /@health
  -
  -Displays a simple health check by returning "alive".
  -
  -== Form handling
  +The request class is also useful when you have multiple query or request parameter which you don't want to
  +name in your controller method header. To access a query or request parameter simply call the getter for
  +the parameter.
  +
  +[source,java]
  +-------------------------------------------
  +public Response index(Request request) {
  +    String foo = request.getParameter("foo");
  +    return Response.withOk();
  +}
  +-------------------------------------------
  +
  +==== Request parameter validation
  +
  +As an additional feature on the request object, you can validate incoming parameters. Just like
  +<<Form handling>> you can access a Validator class, which can perform specific checks on the request
  +parameter.
  +
  +[source,java]
  +-------------------------------------------
  +public Response index(Request request) {
  +  request.validation().email("foo");
  +  request.validation().required("bar");
  +
  +  if (!request.validation().hasErrors()) {
  +     //Handle request
  +  } else {
  +     //Do nothing
  +  }
  +  ...
  +}
  +-------------------------------------------
  +
  +With this validation you can check an incoming request and return specific error messages, for e.g. as JSON.
  +
  +[source,java]
  +-------------------------------------------
  +public Response index(Request request) {
  +  request.validation().email("foo");
  +  request.validation().required("bar");
  +
  +  if (!request.validation().hasErrors()) {
  +     //Handle request
  +  } else {
  +     return Response.withBadRequest()
  +        .andJSONBody(request.validation.getErrors());
  +  }
  +  ...
  +}
  +-------------------------------------------
  +
  +The error messages for the request use the same key as the form handling. Check
  +the documentation on <<Form handling>> for more information on how to customize
  +the specific error messages.
  +
  +=== Form handling
   
   To access a form submitted to a controller class, you can simply pass
   the mangoo I/O Form class. Here is an example of how this might look
  
positive.code: The Flash class is automatically available in the template so you don't
  have to pass the class to the template via a controller.
  
  == Authentication
  
  mangoo I/O comes with two authentication implementations out of the box: HTTP Basic
  authentication and custom authentication where you have a custom login
  and authentication process ready to use.
  
  === Basic authentication
  
  The HTTP Basic authentication in mangoo I/O uses a predefined filter:
  BasicAuthenticationFilter.class. So the first step to enable Basic
  
negative.code: * Range
  * Regular expression
  
  ==== Showing error messages in a template
  
  To show an error in a template, simply check for an error on a spcific field
  
  