From 77e51f30af75056cd835d7d27337136d47f6cae2 Mon Sep 17 00:00:00 2001 From: Samuel Hellawell Date: Tue, 5 Oct 2021 19:33:21 +0100 Subject: [PATCH 1/2] if requestBody required is false, allow empty requests --- src/middlewares/parsers/body.parse.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/middlewares/parsers/body.parse.ts b/src/middlewares/parsers/body.parse.ts index fdbddf17..eb2161c1 100644 --- a/src/middlewares/parsers/body.parse.ts +++ b/src/middlewares/parsers/body.parse.ts @@ -57,6 +57,9 @@ export class BodySchemaParser { } if (!content) { + if (requestBody.required === false) { // user has explicitly set body required to false + return {}; + } const msg = contentType.contentType === 'not_provided' ? 'media type not specified' From 65626784073353fa084bbea839fcf7199299d1b1 Mon Sep 17 00:00:00 2001 From: Samuel Hellawell Date: Tue, 5 Oct 2021 20:25:11 +0100 Subject: [PATCH 2/2] add test --- src/middlewares/parsers/body.parse.ts | 6 ++++-- test/optional-request-body.spec.ts | 5 +++++ test/optional-request-body.yaml | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/middlewares/parsers/body.parse.ts b/src/middlewares/parsers/body.parse.ts index eb2161c1..e0aa76b3 100644 --- a/src/middlewares/parsers/body.parse.ts +++ b/src/middlewares/parsers/body.parse.ts @@ -57,11 +57,13 @@ export class BodySchemaParser { } if (!content) { - if (requestBody.required === false) { // user has explicitly set body required to false + // 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: