My back-end returns JSON data with a content-header that contains the suffix +json'and the charset=utf-8'
The content-type is not recognized as JSON and the body is returned as a plain string instead of JSON.
The problem is the way that the Content-Type header is parsed:
Content-Type: application/whatever+json;charset=utf-8
This is the method for parsing the header (and the body):
protected parseBody(response: FetcherResponse): Promise<object | string> {
const contentType = response.headers.get('Content-Type');
const contentLength = response.headers.get('Content-Length');
if (
// As one might expect, a "204 No Content" is empty! This means there
// isn't enough to `JSON.parse`, and trying will result in an error.
response.status !== 204 &&
contentLength !== '0' &&
contentType &&
(contentType.startsWith('application/json') ||
contentType.endsWith('+json'))
) {
return response.json();
} else {
return response.text();
}
}
The condition for checking on JSON fails, because:
contentType.endsWith('+json')
is false in the case that there is a charset defined at the end of the header
My back-end returns JSON data with a content-header that contains the suffix
+json
'and thecharset=utf-8'
The content-type is not recognized as JSON and the body is returned as a plain string instead of JSON.The problem is the way that the
Content-Type
header is parsed:Content-Type: application/whatever+json;charset=utf-8
This is the method for parsing the header (and the body):
The condition for checking on JSON fails, because:
contentType.endsWith('+json')
isfalse
in the case that there is a charset defined at the end of the header