Class Jackson2JsonpInterceptor

  • All Implemented Interfaces:
    javax.ws.rs.ext.WriterInterceptor, AsyncWriterInterceptor

    @Provider
    @ConstrainedTo(SERVER)
    public class Jackson2JsonpInterceptor
    extends Object
    implements AsyncWriterInterceptor

    JSONP is an alternative to normal AJAX requests. Instead of using a XMLHttpRequest a script tag is added to the DOM. The browser will call the corresponding URL and download the JavaScript. The server creates a response which looks like a method call. The parameter is the body of the request. The name of the method to call is normally passed as query parameter. The method has to be present in the current JavaScript environment.

    Jackson JSON processor can produce such an response. This interceptor checks if the media type is a JavaScript one if there is a query parameter with the method name. The default name of this query parameter is "callback". So this interceptor is compatible with jQuery.

    It is possible to wrap the generated javascript function call in a try-catch block. You can enable it either by setting the wrapInTryCatch property of the provider instance to true or by setting the resteasy.jsonp.silent context-param to true:

      
      <context-param>
       <param-name>resteasy.jsonp.silent</param-name>
       <param-value>true</param-value>
      </context-param>
      
     
    Version:
    $Revision: 1 $
    Author:
    Holger Morch
    • Field Detail

      • TEXT_JAVASCRIPT_MEDIA_TYPE

        public static final javax.ws.rs.core.MediaType TEXT_JAVASCRIPT_MEDIA_TYPE
        "text/javascript" media type. Default media type of script tags.
      • APPLICATION_JAVASCRIPT_MEDIA_TYPE

        public static final javax.ws.rs.core.MediaType APPLICATION_JAVASCRIPT_MEDIA_TYPE
        "application/javascript" media type.
      • TEXT_JSON_TYPE

        public static final javax.ws.rs.core.MediaType TEXT_JSON_TYPE
        "text/json" media type.
      • APPLICATION_PLUS_JSON_TYPE

        public static final javax.ws.rs.core.MediaType APPLICATION_PLUS_JSON_TYPE
        "application/*+json" media type.
      • DEFAULT_CALLBACK_QUERY_PARAMETER

        public static final String DEFAULT_CALLBACK_QUERY_PARAMETER
        Default name of the query parameter with the method name.
        See Also:
        Constant Field Values
      • jsonpCompatibleMediaTypes

        public static final MediaTypeMap<String> jsonpCompatibleMediaTypes
        If response media type is one of this jsonp response may be created.
      • DEFAULT_MAPPER

        protected static final com.fasterxml.jackson.databind.ObjectMapper DEFAULT_MAPPER
        Default ObjectMapper for type resolution. Used if none is provided by Providers.
      • objectMapper

        protected com.fasterxml.jackson.databind.ObjectMapper objectMapper
        The ObjectMapper used to create typing information.
      • providers

        protected javax.ws.rs.ext.Providers providers
        The Providers used to retrieve the objectMapper from.
    • Constructor Detail

      • Jackson2JsonpInterceptor

        public Jackson2JsonpInterceptor()
    • Method Detail

      • aroundWriteTo

        public void aroundWriteTo​(javax.ws.rs.ext.WriterInterceptorContext context)
                           throws IOException,
                                  javax.ws.rs.WebApplicationException
        Specified by:
        aroundWriteTo in interface javax.ws.rs.ext.WriterInterceptor
        Throws:
        IOException
        javax.ws.rs.WebApplicationException
      • getObjectMapper

        protected com.fasterxml.jackson.databind.ObjectMapper getObjectMapper​(Class<?> type,
                                                                              javax.ws.rs.core.MediaType mediaType)
        Search for an ObjectMapper for the given class and mediaType
        Parameters:
        type - the Class to serialize
        mediaType - the response MediaType
        Returns:
        the ObjectMapper
      • setUri

        @Context
        public void setUri​(javax.ws.rs.core.UriInfo uri)
        Setter used by RESTeasy to provide the UriInfo.
        Parameters:
        uri - the uri to set
      • setProviders

        @Context
        public void setProviders​(javax.ws.rs.ext.Providers providers)
        Setter used by RESTeasy to provide the Providers
        Parameters:
        providers -
      • setObjectMapper

        public void setObjectMapper​(com.fasterxml.jackson.databind.ObjectMapper objectMapper)
        Set an fix ObjectMapper. If this is not set Providers are used for lookup. If there are is none too, use a default one.
        Parameters:
        objectMapper -
      • getCallbackQueryParameter

        public String getCallbackQueryParameter()
        Get the name of the query parameter which contains the JavaScript method name. Default: callback.
        Returns:
        the callbackQueryParameter
      • setCallbackQueryParameter

        public void setCallbackQueryParameter​(String callbackQueryParameter)
        Set callback query parameter.
        Parameters:
        callbackQueryParameter - the callbackQueryParameter to set
        See Also:
        getCallbackQueryParameter()
      • isWrapInTryCatch

        public boolean isWrapInTryCatch()
        Check is the JSONP callback will be wrapped with try-catch block
        Returns:
        true if try-catch block is generated; false otherwise
      • setWrapInTryCatch

        public void setWrapInTryCatch​(boolean wrapInTryCatch)
        Enables or disables wrapping the JSONP callback try try-catch block
        Parameters:
        wrapInTryCatch - true if you want to wrap the result with try-catch block; false otherwise