ProblemDetail XML support via Jackson

Closes gh-29927
This commit is contained in:
rstoyanchev
2023-02-08 10:39:41 +00:00
parent 9c0b28ffdc
commit e5ff54955f
11 changed files with 191 additions and 29 deletions

View File

@@ -371,7 +371,7 @@ class Jackson2ObjectMapperBuilderTests {
.build();
assertThat(mapper.mixInCount()).isEqualTo(2);
assertThat(mapper.findMixInClassFor(ProblemDetail.class)).isAssignableFrom(ProblemDetailJacksonMixin.class);
assertThat(mapper.findMixInClassFor(ProblemDetail.class)).isAssignableFrom(ProblemDetailJacksonXmlMixin.class);
assertThat(mapper.findMixInClassFor(target)).isSameAs(mixInSource);
}
@@ -387,7 +387,7 @@ class Jackson2ObjectMapperBuilderTests {
.build();
assertThat(mapper.mixInCount()).isEqualTo(2);
assertThat(mapper.findMixInClassFor(ProblemDetail.class)).isAssignableFrom(ProblemDetailJacksonMixin.class);
assertThat(mapper.findMixInClassFor(ProblemDetail.class)).isAssignableFrom(ProblemDetailJacksonXmlMixin.class);
assertThat(mapper.findMixInClassFor(target)).isSameAs(mixInSource);
}

View File

@@ -243,7 +243,7 @@ public class Jackson2ObjectMapperFactoryBeanTests {
ObjectMapper mapper = this.factory.getObject();
assertThat(mapper.mixInCount()).isEqualTo(2);
assertThat(mapper.findMixInClassFor(ProblemDetail.class)).isAssignableFrom(ProblemDetailJacksonMixin.class);
assertThat(mapper.findMixInClassFor(ProblemDetail.class)).isAssignableFrom(ProblemDetailJacksonXmlMixin.class);
assertThat(mapper.findMixInClassFor(target)).isSameAs(mixinSource);
}

View File

@@ -65,7 +65,7 @@ public class ProblemDetailJacksonMixinTests {
@Test
void readCustomProperty() throws Exception {
ProblemDetail problemDetail = this.mapper.readValue(
ProblemDetail detail = this.mapper.readValue(
"{\"type\":\"about:blank\"," +
"\"title\":\"Bad Request\"," +
"\"status\":400," +
@@ -73,14 +73,32 @@ public class ProblemDetailJacksonMixinTests {
"\"host\":\"abc.org\"," +
"\"user\":null}", ProblemDetail.class);
assertThat(problemDetail.getType()).isEqualTo(URI.create("about:blank"));
assertThat(problemDetail.getTitle()).isEqualTo("Bad Request");
assertThat(problemDetail.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST.value());
assertThat(problemDetail.getDetail()).isEqualTo("Missing header");
assertThat(problemDetail.getProperties()).containsEntry("host", "abc.org");
assertThat(problemDetail.getProperties()).containsEntry("user", null);
assertThat(detail.getType()).isEqualTo(URI.create("about:blank"));
assertThat(detail.getTitle()).isEqualTo("Bad Request");
assertThat(detail.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST.value());
assertThat(detail.getDetail()).isEqualTo("Missing header");
assertThat(detail.getProperties()).containsEntry("host", "abc.org");
assertThat(detail.getProperties()).containsEntry("user", null);
}
@Test
void readCustomPropertyFromXml() throws Exception {
ObjectMapper xmlMapper = new Jackson2ObjectMapperBuilder().createXmlMapper(true).build();
ProblemDetail detail = xmlMapper.readValue(
"<problem xmlns=\"urn:ietf:rfc:7807\">" +
"<type>about:blank</type>" +
"<title>Bad Request</title>" +
"<status>400</status>" +
"<detail>Missing header</detail>" +
"<host>abc.org</host>" +
"</problem>", ProblemDetail.class);
assertThat(detail.getType()).isEqualTo(URI.create("about:blank"));
assertThat(detail.getTitle()).isEqualTo("Bad Request");
assertThat(detail.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST.value());
assertThat(detail.getDetail()).isEqualTo("Missing header");
assertThat(detail.getProperties()).containsEntry("host", "abc.org");
}
private void testWrite(ProblemDetail problemDetail, String expected) throws Exception {
String output = this.mapper.writeValueAsString(problemDetail);