Skip to content

Commit b435b51

Browse files
author
David
committed
add validation that Content-Type is supported according to schema
fixes #55
1 parent d55554e commit b435b51

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/main/java/com/mservicetech/openapi/validation/OpenApiValidator.java

+6
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public class OpenApiValidator {
4444
final String STATUS_INVALID_REQUEST_PATH = "ERR10007";
4545
final String STATUS_METHOD_NOT_ALLOWED = "ERR10008";
4646
final String STATUS_CONTENT_TYPE_MISMATCH = "ERR10015";
47+
final String STATUS_CONTENT_TYPE_NOT_SUPPORTED = "ERR11108";
4748

4849
final String VALIDATOR_REQUEST_BODY_UNEXPECTED = "ERR11013";
4950
final String VALIDATOR_REQUEST_BODY_MISSING = "ERR11014";
@@ -167,6 +168,11 @@ public Status validateRequestPath (String requestURI , String httpMethod, Reques
167168
}
168169

169170
if (requestEntity!=null) {
171+
if(requestEntity.getContentType()!=null &&
172+
openApiOperation.getOperation().getRequestBody().getContentMediaType(requestEntity.getContentType())==null) {
173+
return new Status(STATUS_CONTENT_TYPE_NOT_SUPPORTED, requestEntity.getContentType());
174+
}
175+
170176
NormalisedPath requestPath = openApiOperation.getPathString();
171177
Status status = validateRequestParameters(requestEntity, requestPath, openApiOperation);
172178
if(status != null) return status;

src/test/java/com/mservicetech/openapi/validation/OpenApiValidatorTest.java

+26
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,32 @@ public void testRequestQueryFormObjectWithErrorMissingValue() {
369369
//{"statusCode":400,"code":"ERR11004","message":"VALIDATOR_SCHEMA","description":"Schema Validation Error - search.name: must be at least 1 characters long","severity":"ERROR"}
370370
}
371371

372+
@Test
373+
public void testRequestMediaType() {
374+
RequestEntity requestEntity = new RequestEntity();
375+
Map<String, Object> queryMap = new HashMap<>();
376+
requestEntity.setQueryParameters(queryMap);
377+
requestEntity.setContentType("application/xml");
378+
Status status = openApiValidator.validateRequestPath("/pets", "post", requestEntity);
379+
Assert.assertNotNull(status);
380+
Assert.assertEquals(status.getCode(), "ERR11108");
381+
}
382+
383+
384+
@Test
385+
public void testRequestMediaType2() {
386+
RequestEntity requestEntity = new RequestEntity();
387+
Map<String, Object> queryMap = new HashMap<>();
388+
queryMap.put("limit", 12);
389+
queryMap.put("search", "tag,cat,name");
390+
requestEntity.setQueryParameters(queryMap);
391+
requestEntity.setContentType("application/json");
392+
Status status = openApiValidator.validateRequestPath("/pets", "get", requestEntity);
393+
Assert.assertNotNull(status);
394+
Assert.assertEquals(status.getCode(), "ERR11108");
395+
}
396+
397+
372398
@Test
373399
public void testResponseBody() {
374400
InputStream in = this.getClass().getClassLoader().getResourceAsStream("json/req1.json");

0 commit comments

Comments
 (0)