Browse Source

Make ProblemDetailJacksonXmlMixin compatible with Jackson 3

Closes gh-34925
pull/34949/head
Sébastien Deleuze 7 months ago
parent
commit
13be54a1d2
  1. 22
      spring-web/src/main/java/org/springframework/http/converter/json/ProblemDetailJacksonXmlMixin.java
  2. 2
      spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java

22
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.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonInclude; 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 com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import org.jspecify.annotations.Nullable; import org.jspecify.annotations.Nullable;
@ -40,36 +40,44 @@ import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY;
* <a href="https://github.com/FasterXML/jackson-dataformat-xml/issues/355">FasterXML/jackson-dataformat-xml#355</a>. * <a href="https://github.com/FasterXML/jackson-dataformat-xml/issues/355">FasterXML/jackson-dataformat-xml#355</a>.
* *
* @author Rossen Stoyanchev * @author Rossen Stoyanchev
* @author Sebastien Deleuze
* @since 6.0.5 * @since 6.0.5
*/ */
@JsonInclude(NON_EMPTY) @JsonInclude(NON_EMPTY)
@JacksonXmlRootElement(localName = "problem", namespace = ProblemDetailJacksonXmlMixin.NAMESPACE) @JacksonXmlRootElement(localName = "problem", namespace = ProblemDetailJacksonXmlMixin.NAMESPACE)
@JsonRootName(value = "problem", namespace = ProblemDetailJacksonXmlMixin.NAMESPACE)
public interface ProblemDetailJacksonXmlMixin { public interface ProblemDetailJacksonXmlMixin {
/** RFC 7807 (obsoleted by RFC 9457) namespace. */ /** RFC 7807 (obsoleted by RFC 9457) namespace. */
String NAMESPACE = "urn:ietf:rfc:7807"; 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(); URI getType();
@JacksonXmlProperty(namespace = NAMESPACE) @com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE)
@tools.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE)
String getTitle(); String getTitle();
@JacksonXmlProperty(namespace = NAMESPACE) @com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE)
@tools.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE)
int getStatus(); int getStatus();
@JacksonXmlProperty(namespace = NAMESPACE) @com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE)
@tools.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE)
String getDetail(); String getDetail();
@JacksonXmlProperty(namespace = NAMESPACE) @com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE)
@tools.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE)
URI getInstance(); URI getInstance();
@JsonAnySetter @JsonAnySetter
void setProperty(String name, @Nullable Object value); void setProperty(String name, @Nullable Object value);
@JsonAnyGetter @JsonAnyGetter
@JacksonXmlProperty(namespace = NAMESPACE) @com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE)
@tools.jackson.dataformat.xml.annotation.JacksonXmlProperty(namespace = NAMESPACE)
Map<String, Object> getProperties(); Map<String, Object> getProperties();
} }

2
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.JsonTypeName;
import com.fasterxml.jackson.annotation.JsonView; import com.fasterxml.jackson.annotation.JsonView;
import org.jspecify.annotations.Nullable; import org.jspecify.annotations.Nullable;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.skyscreamer.jsonassert.JSONAssert; import org.skyscreamer.jsonassert.JSONAssert;
import org.xmlunit.assertj.XmlAssert; import org.xmlunit.assertj.XmlAssert;
@ -413,7 +412,6 @@ class RequestResponseBodyMethodProcessorTests {
} }
@Test @Test
@Disabled("https://github.com/FasterXML/jackson-dataformat-xml/issues/757")
void problemDetailWhenProblemXmlRequested() throws Exception { void problemDetailWhenProblemXmlRequested() throws Exception {
this.servletRequest.addHeader("Accept", MediaType.APPLICATION_PROBLEM_XML_VALUE); this.servletRequest.addHeader("Accept", MediaType.APPLICATION_PROBLEM_XML_VALUE);
testProblemDetailMediaType(MediaType.APPLICATION_PROBLEM_XML_VALUE); testProblemDetailMediaType(MediaType.APPLICATION_PROBLEM_XML_VALUE);

Loading…
Cancel
Save