На мой взгляд, нельзя использовать коды, отличные от 200, чтобы сообщать клиентам проблемы на уровне приложений, эти коды зарезервированы исключительно для функций уровня HTTP.
Это имеет смысл только вернуть 200 код и место на уровне приложений код/сообщение об ошибке/что в теле ответа HTTP
Однако, есть по крайней мере один протокол, который использует 500 кодов для связи на уровне приложений сбои: SOAP. Например, вот глава ответ HTTP, содержащий сообщения об ошибке SOAP:
HTTP/1.1 500 Internal Server Error
Content-Type: application/soap+xml; charset="utf-8"
Content-Length: nnnn
<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Body>
<env:Fault>
<env:Code>
<env:Value>env:Sender</env:Value>
<env:Subcode>
<env:Value>rpc:BadArguments</env:Value>
</env:Subcode>
</env:Code>
Но, во всяком случае, вы видите, что не только 500 HTTP код ошибки возвращается, но данные на уровне приложений (SOAP) входит в сложную информацию о что случилось.
В конечном счете, вам решать, будете ли вы использовать что-то помимо 200 для вашего протокола. Требования вашего клиента будут определять, достаточно ли одного кода ошибки 500, чтобы они могли полностью сообщить об ошибке и это стало причиной. Если этого достаточно, вам больше ничего не нужно. Если это не так, придумайте свой протокол или, лучше, используйте существующий, например SOAP или REST.
Выбрасывает исключение, эквивалентное возврату кода состояния 500? Должно ли это быть использовано в этом случае? – Pranav
Я думаю, что Tomcat вернет 500, если ваше исключение оставляет метод 'doPost'. Опять же, это не уместно с моей точки зрения, поскольку вы должны сообщать об исключении в теле ответа HTTP 200 - просто придумайте свой формат для этой цели и завершите его в ответ HTTP 200. –
Поскольку это не вопрос одного ответа, имеет смысл спросить его на programers.stackexchange.com. –