У меня есть интерфейсный Angular, работающий на Apache с внутренним Spring REST API на Tomcat.
Я хотел выдать ошибку 501 в каком-то случае ошибки и хочу, чтобы этот ответ был представлен как JSON для пользовательского интерфейса (Content-Type
так как "application/json"
). Это отлично работает в моем локальном, как и ожидалось, с Angular, способным интерпретировать ответ JSON, но когда дело доходит до некоторой общей среды QA, он не работает, потому что ошибка 501 представлена пользовательскому интерфейсу как text / html, который Angular не может переварить.
Разница между моим локальным и QA в том, что Angular работает на узле, тогда как QA использует Apache. Является ли apache, который преобразует ответ JSON с кодом 501 http в тип html?
ответ, который я получаю в моем браузере, приведен ниже.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>501 Not Implemented</title>
</head><body>
<h1>Not Implemented</h1>
<p>GET to /test/customer/getCustomer not supported.<br />
</p>
</body></html>
Наконец, я смог найти, что заставляет Apache заменять все ответы, отличные от 2XX, собственным документом об ошибке. Все, что вам нужно сделать, это прокомментировать или отключить ProxyErrorOverride. С этим Apache будет передавать ответ об ошибке через прокси-сервер от внутреннего сервера к пользовательскому интерфейсу без потери содержимого, например, он отправляет ответ об ошибке типа Json без потери заголовков.
Надеюсь, это кому-то поможет.