1
0
mirror of synced 2026-05-22 13:23:17 +00:00

Add support for JacksonJsonHttpMessageConverter

This commit introduces classpath checks and instantiation of
JacksonJsonHttpMessageConverter (based on Jackson 3) leveraging
a new GenericHttpMessageConverterAdapter which allows to adapt
SmartHttpMessageConverter to GenericHttpMessageConverter.

See gh-17832
Signed-off-by: Sébastien Deleuze <sdeleuze@users.noreply.github.com>
This commit is contained in:
Sébastien Deleuze
2025-10-03 15:22:52 +02:00
committed by Rob Winch
parent 702a177e25
commit 137f8fd670
13 changed files with 282 additions and 13 deletions
@@ -19,8 +19,10 @@ package org.springframework.security.config.web.server;
import org.springframework.http.converter.GenericHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.GsonHttpMessageConverter;
import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter;
import org.springframework.http.converter.json.JsonbHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.security.oauth2.core.http.converter.GenericHttpMessageConverterAdapter;
import org.springframework.util.ClassUtils;
/**
@@ -32,6 +34,8 @@ import org.springframework.util.ClassUtils;
*/
final class HttpMessageConverters {
private static final boolean jacksonPresent;
private static final boolean jackson2Present;
private static final boolean gsonPresent;
@@ -40,6 +44,7 @@ final class HttpMessageConverters {
static {
ClassLoader classLoader = HttpMessageConverters.class.getClassLoader();
jacksonPresent = ClassUtils.isPresent("tools.jackson.databind.json.JsonMapper", classLoader);
jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader)
&& ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader);
gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader);
@@ -49,7 +54,11 @@ final class HttpMessageConverters {
private HttpMessageConverters() {
}
@SuppressWarnings("removal")
static GenericHttpMessageConverter<Object> getJsonMessageConverter() {
if (jacksonPresent) {
return new GenericHttpMessageConverterAdapter<>(new JacksonJsonHttpMessageConverter());
}
if (jackson2Present) {
return new MappingJackson2HttpMessageConverter();
}