From 13be54a1d26450c6a23f1e08f794b760074618e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Mon, 19 May 2025 14:31:10 +0200 Subject: [PATCH] Make ProblemDetailJacksonXmlMixin compatible with Jackson 3 Closes gh-34925 --- .../json/ProblemDetailJacksonXmlMixin.java | 22 +++++++++++++------ ...questResponseBodyMethodProcessorTests.java | 2 -- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/ProblemDetailJacksonXmlMixin.java b/spring-web/src/main/java/org/springframework/http/converter/json/ProblemDetailJacksonXmlMixin.java index 61a268267f3..cd4a1a34be6 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/ProblemDetailJacksonXmlMixin.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/ProblemDetailJacksonXmlMixin.java @@ -22,7 +22,7 @@ import java.util.Map; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.annotation.JsonRootName; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import org.jspecify.annotations.Nullable; @@ -40,36 +40,44 @@ import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY; * FasterXML/jackson-dataformat-xml#355. * * @author Rossen Stoyanchev + * @author Sebastien Deleuze * @since 6.0.5 */ @JsonInclude(NON_EMPTY) @JacksonXmlRootElement(localName = "problem", namespace = ProblemDetailJacksonXmlMixin.NAMESPACE) +@JsonRootName(value = "problem", namespace = ProblemDetailJacksonXmlMixin.NAMESPACE) public interface ProblemDetailJacksonXmlMixin { /** RFC 7807 (obsoleted by RFC 9457) namespace. */ String NAMESPACE = "urn:ietf:rfc:7807"; - @JacksonXmlProperty(namespace = NAMESPACE) + @com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE) + @tools.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE) URI getType(); - @JacksonXmlProperty(namespace = NAMESPACE) + @com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE) + @tools.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE) String getTitle(); - @JacksonXmlProperty(namespace = NAMESPACE) + @com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE) + @tools.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE) int getStatus(); - @JacksonXmlProperty(namespace = NAMESPACE) + @com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE) + @tools.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE) String getDetail(); - @JacksonXmlProperty(namespace = NAMESPACE) + @com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE) + @tools.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE) URI getInstance(); @JsonAnySetter void setProperty(String name, @Nullable Object value); @JsonAnyGetter - @JacksonXmlProperty(namespace = NAMESPACE) + @com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE) + @tools.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE) Map getProperties(); } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java index 849c9a0236e..c33aafdcdb0 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java @@ -29,7 +29,6 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonView; import org.jspecify.annotations.Nullable; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.skyscreamer.jsonassert.JSONAssert; import org.xmlunit.assertj.XmlAssert; @@ -413,7 +412,6 @@ class RequestResponseBodyMethodProcessorTests { } @Test - @Disabled("https://github.com/FasterXML/jackson-dataformat-xml/issues/757") void problemDetailWhenProblemXmlRequested() throws Exception { this.servletRequest.addHeader("Accept", MediaType.APPLICATION_PROBLEM_XML_VALUE); testProblemDetailMediaType(MediaType.APPLICATION_PROBLEM_XML_VALUE);