Назад | Перейти на главную страницу

Почему ошибка HTTP 501 типа JSON представлена ​​пользовательскому интерфейсу как text / html вместо application / json?

У меня есть интерфейсный 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 без потери заголовков.

ProxyErrorOverride Off

Надеюсь, это кому-то поможет.