diff --git a/src/middlewares/parsers/body.parse.ts b/src/middlewares/parsers/body.parse.ts index fdbddf17..e0aa76b3 100644 --- a/src/middlewares/parsers/body.parse.ts +++ b/src/middlewares/parsers/body.parse.ts @@ -57,8 +57,13 @@ export class BodySchemaParser { } if (!content) { + // check if required is false, if so allow request when no content type is supplied + const contentNotProvided = contentType.contentType === 'not_provided'; + if ((contentType.contentType === undefined || contentNotProvided) && requestBody.required === false) { + return {}; + } const msg = - contentType.contentType === 'not_provided' + contentNotProvided ? 'media type not specified' : `unsupported media type ${contentType.contentType}`; throw new UnsupportedMediaType({ path: path, message: msg }); diff --git a/test/optional-request-body.spec.ts b/test/optional-request-body.spec.ts index 9a0d2d58..f99aa8d6 100644 --- a/test/optional-request-body.spec.ts +++ b/test/optional-request-body.spec.ts @@ -32,6 +32,11 @@ describe(packageJson.name, () => { .set('Content-Type', 'application/json') .expect(201)); + it('create document should return 201 with empty body', async () => + request(app) + .post(`/documents`) + .expect(201)); + it('return 415', async () => request(app) .post(`/documents`) diff --git a/test/optional-request-body.yaml b/test/optional-request-body.yaml index c86b3269..368adad4 100644 --- a/test/optional-request-body.yaml +++ b/test/optional-request-body.yaml @@ -10,6 +10,7 @@ paths: post: summary: Create a document requestBody: + required: false content: application/json: schema: