Я хочу написать сервлет, который будет возвращать такой HTTP-ответ:
HTTP/1.1 500 <short custom message>
Content-Length: ...
<longer custom message>
Причина в том, что я хочу, чтобы программный клиент мог обрабатывать ответное сообщение, чтобы получить конкретный ответ, но я также хочу заполнить тело ответа более подробным объяснением, чтобы его было легко использовать с помощью браузера.
Теперь в HttpServletResponse есть метод sendError (int, String), который позволяет мне указать код ошибки и сообщение. В javadocs говорится только о том, что сообщение будет встроено в какую-то html-страницу, но ничего не говорится о настройке сообщения HTTP-ответа. После вызова этого метода вам не разрешается писать в ответ что-либо еще. В моих тестах (с причалом) сообщение используется как для ответа http, так и для тела html, что меня устраивает, за исключением того, что я хочу указать две разные строки, и я не думаю, что настройка ответа http сообщение гарантировано с другой реализацией.
Также существует метод setStatus (int), который вы можете вызвать с любым кодом, а затем вы можете написать свое собственное тело html. Это близко, за исключением того, что вы не можете указать сообщение ответа http.
Наконец, есть метод setStatus (int, String), который действительно делает именно то, что я хочу, но он устарел из-за некоторой двусмысленности. Я предполагаю, что некоторые контейнеры сервлетов записывали сообщение в тело ответа и закрывали ответ.
Помимо использования устаревшего метода, я предполагаю, что я здесь облажался, но мне любопытно, знает ли кто-нибудь еще какие-нибудь уловки?