Class JacksonJsonView
- All Implemented Interfaces:
Aware
,BeanNameAware
,ApplicationContextAware
,ServletContextAware
,View
View
that renders JSON content by serializing the model for the current request
using Jackson 3's ObjectMapper
.
By default, the entire contents of the model map (with the exception of framework-specific classes)
will be encoded as JSON. If the model contains only one key, you can have it extracted encoded as JSON
alone via setExtractValueFromSingleKeyModel(boolean)
.
The following special model entries are supported:
- A JSON view with a
com.fasterxml.jackson.annotation.JsonView
key and the class name of the JSON view as value. - A filter provider with a
tools.jackson.databind.ser.FilterProvider
key and the filter provider class name as value.
- Since:
- 7.0
- Author:
- Sebastien Deleuze
-
Field Summary
FieldsFields inherited from class org.springframework.web.servlet.view.AbstractJacksonView
FILTER_PROVIDER_HINT, JSON_VIEW_HINT, updateContentLength
Fields inherited from class org.springframework.context.support.ApplicationObjectSupport
logger
Fields inherited from interface org.springframework.web.servlet.View
PATH_VARIABLES, RESPONSE_STATUS_ATTRIBUTE, SELECTED_CONTENT_TYPE
-
Constructor Summary
ConstructorsConstructorDescriptionConstruct a new instance with aJsonMapper
customized with theJacksonModule
s found byMapperBuilder.findModules(ClassLoader)
and setting the content type toapplication/json
.JacksonJsonView
(ObjectMapper objectMapper) Construct a new instance using the providedObjectMapper
and setting the content type toapplication/json
. -
Method Summary
Modifier and TypeMethodDescriptionprotected Object
filterModel
(Map<String, Object> model, HttpServletRequest request) Filter out undesired attributes from the given model.Return the attributes in the model that should be rendered by this view.void
setExtractValueFromSingleKeyModel
(boolean extractValueFromSingleKeyModel) Set whether to serialize models containing a single attribute as a map or whether to extract the single value from the model and serialize it directly.void
setJsonPrefix
(String jsonPrefix) Specify a custom prefix to use for this view's JSON output.void
setModelKey
(String modelKey) Set the attribute in the model that should be rendered by this view.void
setModelKeys
(@Nullable Set<String> modelKeys) Set the attributes in the model that should be rendered by this view.void
setPrefixJson
(boolean prefixJson) Indicates whether the JSON output by this view should be prefixed with")]}', "
.protected void
writePrefix
(tools.jackson.core.JsonGenerator generator, Object object) Write a prefix before the main content.Methods inherited from class org.springframework.web.servlet.view.AbstractJacksonView
getEncoding, prepareResponse, renderMergedOutputModel, setDisableCaching, setEncoding, setUpdateContentLength, writeContent, writeSuffix
Methods inherited from class org.springframework.web.servlet.view.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, writeToResponse
Methods inherited from class org.springframework.web.context.support.WebApplicationObjectSupport
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext
Methods inherited from class org.springframework.context.support.ApplicationObjectSupport
getApplicationContext, getMessageSourceAccessor, initApplicationContext, obtainApplicationContext, requiredContextClass, setApplicationContext
-
Field Details
-
DEFAULT_CONTENT_TYPE
Default content type: "application/json". Overridable throughAbstractView.setContentType(java.lang.String)
.- See Also:
-
-
Constructor Details
-
JacksonJsonView
public JacksonJsonView()Construct a new instance with aJsonMapper
customized with theJacksonModule
s found byMapperBuilder.findModules(ClassLoader)
and setting the content type toapplication/json
. -
JacksonJsonView
Construct a new instance using the providedObjectMapper
and setting the content type toapplication/json
.
-
-
Method Details
-
setJsonPrefix
Specify a custom prefix to use for this view's JSON output. Default is none.- See Also:
-
setPrefixJson
public void setPrefixJson(boolean prefixJson) Indicates whether the JSON output by this view should be prefixed with")]}', "
. Default isfalse
.Prefixing the JSON string in this manner is used to help prevent JSON Hijacking. The prefix renders the string syntactically invalid as a script so that it cannot be hijacked. This prefix should be stripped before parsing the string as JSON.
- See Also:
-
setModelKey
Description copied from class:AbstractJacksonView
Set the attribute in the model that should be rendered by this view. When set, all other model attributes will be ignored.- Specified by:
setModelKey
in classAbstractJacksonView
-
setModelKeys
-
getModelKeys
-
setExtractValueFromSingleKeyModel
public void setExtractValueFromSingleKeyModel(boolean extractValueFromSingleKeyModel) Set whether to serialize models containing a single attribute as a map or whether to extract the single value from the model and serialize it directly.The effect of setting this flag is similar to using
JacksonJsonHttpMessageConverter
with an@ResponseBody
request-handling method.Default is
false
. -
filterModel
Filter out undesired attributes from the given model. The return value can be either anotherMap
or a single value object.The default implementation removes
BindingResult
instances and entries not included in themodelKeys
property.- Specified by:
filterModel
in classAbstractJacksonView
- Parameters:
model
- the model, as passed on toAbstractJacksonView.renderMergedOutputModel(java.util.Map<java.lang.String, java.lang.Object>, jakarta.servlet.http.HttpServletRequest, jakarta.servlet.http.HttpServletResponse)
request
- current HTTP request- Returns:
- the value to be rendered
-
writePrefix
protected void writePrefix(tools.jackson.core.JsonGenerator generator, Object object) throws IOException Description copied from class:AbstractJacksonView
Write a prefix before the main content.- Overrides:
writePrefix
in classAbstractJacksonView
- Parameters:
generator
- the generator to use for writing content.object
- the object to write to the output message.- Throws:
IOException
-