generateResponse function
Response
generateResponse(
- Request request,
- NetworkObject object, {
- int status = HttpStatus.ok,
- String defaultAcceptHeader = '*/*)',
Allow you to easily generate response based on accept header
object
is the object that will be serialized
you can specify the status code by changing status
defaultAcceptHeader
is used only if the request doesn't have accept header
Implementation
Response generateResponse(final Request request, final NetworkObject object,
{final int status = HttpStatus.ok,
final String defaultAcceptHeader = '*/*)'}) {
final requestAccept =
request.headers[HttpHeaders.acceptHeader] ?? defaultAcceptHeader;
final acceptAll = requestAccept.contains('*/*');
if (acceptAll) {
return switch (object) {
NetworkObjectToJson _ => _jsonResponse(status, object),
NetworkObjectToXml _ => _xmlResponse(status, object),
};
}
final splitRequestAccept = requestAccept.split(';');
final filteredAccept =
splitRequestAccept.where((element) => !element.contains('=')).toList();
final acceptableHeader =
filteredAccept.map((e) => ContentType.parse(e)).toList();
for (final acceptHeader in acceptableHeader) {
if (acceptHeader.primaryType == 'application' &&
acceptHeader.subType == 'json' &&
object is NetworkObjectToJson) {
return _jsonResponse(status, object);
} else if (acceptHeader.primaryType == 'application' &&
acceptHeader.subType == 'xml' &&
object is NetworkObjectToXml) {
return _xmlResponse(status, object);
}
}
return Response.badRequest();
}