Symfony stuff to help building a JSON REST api :
- Support JSON payload
 - Support LINK headers
 - Handle exception as JSON response
 - Possibility to validate json payload through json schema
 - Possibility to map custom exception to http code
 
Here is a simple setup to start :
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
    <services>
        <service id="json_body_listener.ui" class="Rezzza\SymfonyRestApiJson\JsonBodyListener">
            <argument type="service">
                <service class="Rezzza\SymfonyRestApiJson\PayloadValidator">
                    <argument type="service">
                        <service class="Rezzza\SymfonyRestApiJson\JsonSchemaTools" />
                    </argument>
                </service>
            </argument>
            <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="24" />
        </service>
        <service id="link_request_listener.ui" class="Rezzza\SymfonyRestApiJson\LinkRequestListener">
            <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="10" />
        </service>
        <service id="json_exception_handler.ui" class="Rezzza\SymfonyRestApiJson\JsonExceptionHandler">
            <argument type="service">
                <service class="Rezzza\SymfonyRestApiJson\ExceptionHttpCodeMap">
                    <argument>%exception_http_code_map%</argument>
                </service>
            </argument>
            <tag name="kernel.event_listener" event="kernel.exception" method="onKernelException" priority="32" />
        </service>
        <service id="json_exception_controller.ui" class="Rezzza\SymfonyRestApiJson\JsonExceptionController">
            <argument>%kernel.debug%</argument>
            <argument>%show_exception_token%</argument>
        </service>
        <service id="ui.event_listener.exception_listener" class="Symfony\Component\HttpKernel\EventListener\ExceptionListener">
            <tag name="kernel.event_subscriber" />
            <tag name="monolog.logger" channel="request" />
            <argument>json_exception_controller.ui:showException</argument>
            <argument type="service" id="logger" on-invalid="null" />
        </service>
    </services>
</container>