Class AbstractJacksonView
java.lang.Object
org.springframework.context.support.ApplicationObjectSupport
org.springframework.web.context.support.WebApplicationObjectSupport
org.springframework.web.servlet.view.AbstractView
org.springframework.web.servlet.view.AbstractJacksonView
- All Implemented Interfaces:
Aware, BeanNameAware, ApplicationContextAware, ServletContextAware, View
- Direct Known Subclasses:
JacksonJsonView, JacksonXmlView
Abstract base class for Jackson 3.x based and content type independent
AbstractView implementations.
The following special model entries are supported:
- A JSON view with a
com.fasterxml.jackson.annotation.JsonViewkey and the class name of the JSON view as value. - A filter provider with a
tools.jackson.databind.ser.FilterProviderkey and the filter provider class name as value.
- Since:
- 7.0
- Author:
- Sebastien Deleuze
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final Stringprotected static final Stringprotected booleanFields inherited from class AbstractView
DEFAULT_CONTENT_TYPEFields inherited from class ApplicationObjectSupport
loggerFields inherited from interface View
PATH_VARIABLES, RESPONSE_STATUS_ATTRIBUTE, SELECTED_CONTENT_TYPE -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractJacksonView(tools.jackson.databind.cfg.MapperBuilder<?, ?> builder, String contentType) protectedAbstractJacksonView(tools.jackson.databind.ObjectMapper mapper, String contentType) -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract ObjectfilterModel(Map<String, Object> model, jakarta.servlet.http.HttpServletRequest request) Filter out undesired attributes from the given model.final tools.jackson.core.JsonEncodingReturn theJsonEncodingfor this view.protected voidprepareResponse(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) Prepare the given response for rendering.protected voidrenderMergedOutputModel(Map<String, Object> model, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) Subclasses must implement this method to actually render the view.voidsetDisableCaching(boolean disableCaching) Disables caching of the generated JSON.voidsetEncoding(tools.jackson.core.JsonEncoding encoding) Set theJsonEncodingfor this view.abstract voidsetModelKey(String modelKey) Set the attribute in the model that should be rendered by this view.voidsetUpdateContentLength(boolean updateContentLength) Whether to update the 'Content-Length' header of the response.protected voidwriteContent(OutputStream stream, Object object, @Nullable Map<String, Object> hints) Write the actual JSON content to the stream.protected voidwritePrefix(tools.jackson.core.JsonGenerator generator, Object object) Write a prefix before the main content.protected voidwriteSuffix(tools.jackson.core.JsonGenerator generator, Object object) Write a suffix after the main content.Methods inherited from class AbstractView
addStaticAttribute, createMergedOutputModel, createRequestContext, createTemporaryOutputStream, exposeModelAsRequestAttributes, formatViewName, generatesDownloadContent, getAttributesMap, getBeanName, getContentType, getRequestContextAttribute, getRequestToExpose, getStaticAttributes, isExposePathVariables, render, setAttributes, setAttributesCSV, setAttributesMap, setBeanName, setContentType, setExposeContextBeansAsAttributes, setExposedContextBeanNames, setExposePathVariables, setRequestContextAttribute, setResponseContentType, toString, writeToResponseMethods inherited from class WebApplicationObjectSupport
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContextMethods inherited from class ApplicationObjectSupport
getApplicationContext, getMessageSourceAccessor, initApplicationContext, obtainApplicationContext, requiredContextClass, setApplicationContext
-
Field Details
-
JSON_VIEW_HINT
-
FILTER_PROVIDER_HINT
-
updateContentLength
protected boolean updateContentLength
-
-
Constructor Details
-
AbstractJacksonView
protected AbstractJacksonView(tools.jackson.databind.cfg.MapperBuilder<?, ?> builder, String contentType) -
AbstractJacksonView
-
-
Method Details
-
setEncoding
public void setEncoding(tools.jackson.core.JsonEncoding encoding) Set theJsonEncodingfor this view.Default is UTF-8.
-
getEncoding
public final tools.jackson.core.JsonEncoding getEncoding()Return theJsonEncodingfor this view. -
setDisableCaching
public void setDisableCaching(boolean disableCaching) Disables caching of the generated JSON.Default is
true, which will prevent the client from caching the generated JSON. -
setUpdateContentLength
public void setUpdateContentLength(boolean updateContentLength) Whether to update the 'Content-Length' header of the response. When set totrue, the response is buffered in order to determine the content length and set the 'Content-Length' header of the response.The default setting is
false. -
prepareResponse
protected void prepareResponse(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) Description copied from class:AbstractViewPrepare the given response for rendering.The default implementation applies a workaround for an IE bug when sending download content via HTTPS.
- Overrides:
prepareResponsein classAbstractView- Parameters:
request- current HTTP requestresponse- current HTTP response
-
renderMergedOutputModel
protected void renderMergedOutputModel(Map<String, Object> model, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws ExceptionDescription copied from class:AbstractViewSubclasses must implement this method to actually render the view.The first step will be preparing the request: In the JSP case, this would mean setting model objects as request attributes. The second step will be the actual rendering of the view, for example including the JSP via a RequestDispatcher.
- Specified by:
renderMergedOutputModelin classAbstractView- Parameters:
model- combined output Map (nevernull), with dynamic values taking precedence over static attributesrequest- current HTTP requestresponse- current HTTP response- Throws:
Exception- if rendering failed
-
writeContent
protected void writeContent(OutputStream stream, Object object, @Nullable Map<String, Object> hints) throws IOExceptionWrite the actual JSON content to the stream.- Parameters:
stream- the output stream to useobject- the value to be rendered, as returned fromfilterModel(Map, HttpServletRequest)hints- additional information about how to serialize the data- Throws:
IOException- if writing failed
-
setModelKey
Set the attribute in the model that should be rendered by this view.When set, all other model attributes will be ignored.
-
filterModel
protected abstract Object filterModel(Map<String, Object> model, jakarta.servlet.http.HttpServletRequest request) Filter out undesired attributes from the given model.The return value can be either another
Mapor a single value object.- Parameters:
model- the model, as passed on torenderMergedOutputModel(Map, HttpServletRequest, HttpServletResponse)request- current HTTP request- Returns:
- the value to be rendered
-
writePrefix
protected void writePrefix(tools.jackson.core.JsonGenerator generator, Object object) throws IOException Write a prefix before the main content.- Parameters:
generator- the generator to use for writing contentobject- the object to write to the output message- Throws:
IOException
-
writeSuffix
protected void writeSuffix(tools.jackson.core.JsonGenerator generator, Object object) throws IOException Write a suffix after the main content.- Parameters:
generator- the generator to use for writing contentobject- the object to write to the output message- Throws:
IOException
-