diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/payload/FieldPathPayloadSubsectionExtractor.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/payload/FieldPathPayloadSubsectionExtractor.java index a4afda24..b0da8d42 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/payload/FieldPathPayloadSubsectionExtractor.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/payload/FieldPathPayloadSubsectionExtractor.java @@ -75,6 +75,9 @@ public class FieldPathPayloadSubsectionExtractor ExtractedField extractedField = new JsonFieldProcessor().extract(this.fieldPath, objectMapper.readValue(payload, Object.class)); Object value = extractedField.getValue(); + if (value == ExtractedField.ABSENT) { + throw new PayloadHandlingException(this.fieldPath + " does not identify a section of the payload"); + } if (value instanceof List) { List extractedList = (List) value; Set uncommonPaths = JsonFieldPaths.from(extractedList).getUncommon(); diff --git a/spring-restdocs-core/src/test/java/org/springframework/restdocs/payload/FieldPathPayloadSubsectionExtractorTests.java b/spring-restdocs-core/src/test/java/org/springframework/restdocs/payload/FieldPathPayloadSubsectionExtractorTests.java index 9db464a3..facf11db 100644 --- a/spring-restdocs-core/src/test/java/org/springframework/restdocs/payload/FieldPathPayloadSubsectionExtractorTests.java +++ b/spring-restdocs-core/src/test/java/org/springframework/restdocs/payload/FieldPathPayloadSubsectionExtractorTests.java @@ -31,6 +31,7 @@ import org.junit.rules.ExpectedException; import org.springframework.http.MediaType; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * Tests for {@link FieldPathPayloadSubsectionExtractor}. @@ -130,4 +131,12 @@ public class FieldPathPayloadSubsectionExtractorTests { assertThat(new String(extractedSubsection)).isEqualTo(new String(subsection)); } + @Test + public void extractNonExistentSubsection() throws JsonParseException, JsonMappingException, IOException { + assertThatThrownBy(() -> new FieldPathPayloadSubsectionExtractor("a.c") + .extractSubsection("{\"a\":{\"b\":{\"c\":5}}}".getBytes(), MediaType.APPLICATION_JSON)) + .isInstanceOf(PayloadHandlingException.class) + .hasMessage("a.c does not identify a section of the payload"); + } + }