/*
 * Copyright 2002-2020 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.http.converter.xml;

import java.nio.charset.StandardCharsets;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import org.springframework.http.MediaType;
import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.util.Assert;

Implementation of HttpMessageConverter that can read and write XML using Jackson 2.x extension component for reading and writing XML encoded data.

By default, this converter supports application/xml, text/xml, and application/*+xml with UTF-8 character set. This can be overridden by setting the supportedMediaTypes property.

The default constructor uses the default configuration provided by Jackson2ObjectMapperBuilder.

Compatible with Jackson 2.9 to 2.12, as of Spring 5.3.

Author:Sebastien Deleuze
Since:4.1
/** * Implementation of {@link org.springframework.http.converter.HttpMessageConverter HttpMessageConverter} * that can read and write XML using <a href="https://github.com/FasterXML/jackson-dataformat-xml"> * Jackson 2.x extension component for reading and writing XML encoded data</a>. * * <p>By default, this converter supports {@code application/xml}, {@code text/xml}, and * {@code application/*+xml} with {@code UTF-8} character set. This can be overridden by * setting the {@link #setSupportedMediaTypes supportedMediaTypes} property. * * <p>The default constructor uses the default configuration provided by {@link Jackson2ObjectMapperBuilder}. * * <p>Compatible with Jackson 2.9 to 2.12, as of Spring 5.3. * * @author Sebastien Deleuze * @since 4.1 */
public class MappingJackson2XmlHttpMessageConverter extends AbstractJackson2HttpMessageConverter {
Construct a new MappingJackson2XmlHttpMessageConverter using default configuration provided by Jackson2ObjectMapperBuilder.
/** * Construct a new {@code MappingJackson2XmlHttpMessageConverter} using default configuration * provided by {@code Jackson2ObjectMapperBuilder}. */
public MappingJackson2XmlHttpMessageConverter() { this(Jackson2ObjectMapperBuilder.xml().build()); }
Construct a new MappingJackson2XmlHttpMessageConverter with a custom ObjectMapper (must be a XmlMapper instance). You can use Jackson2ObjectMapperBuilder to build it easily.
See Also:
/** * Construct a new {@code MappingJackson2XmlHttpMessageConverter} with a custom {@link ObjectMapper} * (must be a {@link XmlMapper} instance). * You can use {@link Jackson2ObjectMapperBuilder} to build it easily. * @see Jackson2ObjectMapperBuilder#xml() */
public MappingJackson2XmlHttpMessageConverter(ObjectMapper objectMapper) { super(objectMapper, new MediaType("application", "xml", StandardCharsets.UTF_8), new MediaType("text", "xml", StandardCharsets.UTF_8), new MediaType("application", "*+xml", StandardCharsets.UTF_8)); Assert.isInstanceOf(XmlMapper.class, objectMapper, "XmlMapper required"); }
{@inheritDoc} The ObjectMapper parameter must be a XmlMapper instance.
/** * {@inheritDoc} * The {@code ObjectMapper} parameter must be a {@link XmlMapper} instance. */
@Override public void setObjectMapper(ObjectMapper objectMapper) { Assert.isInstanceOf(XmlMapper.class, objectMapper, "XmlMapper required"); super.setObjectMapper(objectMapper); } }