From 5ee11fb1b37ed41ca53c8be0e0b1eba5844f1a67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Mon, 11 Mar 2024 09:11:40 +0100 Subject: [PATCH] Polish Yaml support Closes gh-32345 --- .../main/java/org/springframework/http/MediaType.java | 4 +++- .../AllEncompassingFormHttpMessageConverter.java | 10 +++++++++- .../yaml/MappingJackson2YamlHttpMessageConverter.java | 4 ++-- .../config/AnnotationDrivenBeanDefinitionParser.java | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/MediaType.java b/spring-web/src/main/java/org/springframework/http/MediaType.java index 336b76e94c..c6c8303f42 100644 --- a/spring-web/src/main/java/org/springframework/http/MediaType.java +++ b/spring-web/src/main/java/org/springframework/http/MediaType.java @@ -314,13 +314,15 @@ public class MediaType extends MimeType implements Serializable { /** * Public constant media type for {@code application/yaml}. + * @since 6.2 */ public static final MediaType APPLICATION_YAML; /** * A String equivalent of {@link MediaType#APPLICATION_YAML}. + * @since 6.2 */ - public static final String APPLICATION_YAML_VALE = "application/yaml"; + public static final String APPLICATION_YAML_VALUE = "application/yaml"; /** * Public constant media type for {@code image/gif}. diff --git a/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java index 8a7fd943d5..a58288023f 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2024 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. @@ -26,6 +26,7 @@ import org.springframework.http.converter.protobuf.KotlinSerializationProtobufHt import org.springframework.http.converter.smile.MappingJackson2SmileHttpMessageConverter; import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter; import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter; +import org.springframework.http.converter.yaml.MappingJackson2YamlHttpMessageConverter; import org.springframework.util.ClassUtils; /** @@ -47,6 +48,8 @@ public class AllEncompassingFormHttpMessageConverter extends FormHttpMessageConv private static final boolean jackson2SmilePresent; + private static final boolean jackson2YamlPresent; + private static final boolean gsonPresent; private static final boolean jsonbPresent; @@ -64,6 +67,7 @@ public class AllEncompassingFormHttpMessageConverter extends FormHttpMessageConv ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader); jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader); jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader); + jackson2YamlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.yaml.YAMLFactory", classLoader); gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader); jsonbPresent = ClassUtils.isPresent("jakarta.json.bind.Jsonb", classLoader); kotlinSerializationCborPresent = ClassUtils.isPresent("kotlinx.serialization.cbor.Cbor", classLoader); @@ -99,6 +103,10 @@ public class AllEncompassingFormHttpMessageConverter extends FormHttpMessageConv addPartConverter(new MappingJackson2SmileHttpMessageConverter()); } + if (jackson2YamlPresent) { + addPartConverter(new MappingJackson2YamlHttpMessageConverter()); + } + if (kotlinSerializationCborPresent) { addPartConverter(new KotlinSerializationCborHttpMessageConverter()); } diff --git a/spring-web/src/main/java/org/springframework/http/converter/yaml/MappingJackson2YamlHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/yaml/MappingJackson2YamlHttpMessageConverter.java index 38d74a9094..3ab65a85ea 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/yaml/MappingJackson2YamlHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/yaml/MappingJackson2YamlHttpMessageConverter.java @@ -27,10 +27,10 @@ import org.springframework.util.Assert; /** * Implementation of {@link org.springframework.http.converter.HttpMessageConverter * HttpMessageConverter} that can read and write the YAML - * data format using + * data format using * the dedicated Jackson 2.x extension. * - *

By default, this converter supports the {@link MediaType#APPLICATION_YAML_VALE} + *

By default, this converter supports the {@link MediaType#APPLICATION_YAML_VALUE} * media type. This can be overridden by setting the {@link #setSupportedMediaTypes * supportedMediaTypes} property. * diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java index 37daf14a1c..0fdff51767 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java @@ -470,7 +470,7 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { defaultMediaTypes.put("cbor", MediaType.APPLICATION_CBOR_VALUE); } if (jackson2YamlPresent) { - defaultMediaTypes.put("yaml", MediaType.APPLICATION_YAML_VALE); + defaultMediaTypes.put("yaml", MediaType.APPLICATION_YAML_VALUE); } return defaultMediaTypes; }