allowedContentType<T extends Body> function

Middleware allowedContentType<T extends Body>(
  1. List<ContentType> supportedContentType
)

allowedContentType check if the content-type in the request is part of the supportedContentType that your endpoint support else return BadRequest

Implementation

Middleware allowedContentType<T extends Body>(
    List<ContentType> supportedContentType) {
  return (handler) {
    return (request) async {
      if (request.headers.containsKey(HttpHeaders.contentTypeHeader)) {
        final contentType =
            ContentType.parse(request.headers[HttpHeaders.contentTypeHeader]!);
        final isSupported =
            supportedContentType.fold(false, (previousValue, element) {
          return previousValue ||
              element.primaryType == contentType.primaryType &&
                  element.subType == contentType.subType;
        });
        if (!isSupported) {
          final body = BadRequest(
            'about:blank',
            'Not supported content-type',
            '${request.method} ${request.requestedUri.path} doesn\'t support content-type ${contentType.toString()}, supported content-type are: ${supportedContentType.join(', ')}',
            400,
            request.requestedUri.path,
          );
          return generateResponse(request, body);
        }
      }
      return handler(request);
    };
  };
}