Я пишу веб-сервис с Spring (этот вопрос не о Spring...), который реализует (надеюсь) спокойный API. Насколько я понимаю, все ответы должны быть в формате xml или json. В большинстве случаев это не имеет большого значения. Но в одной ситуации это кажется невозможным. Я использую средство от tomcat, где задействован сервлет. По какой-то причине мне приходится использовать фильтр (и эта причина — аутентификация). Поскольку я новичок в сервлетах, мое понимание в конечном итоге не так хорошо, но для меня это выглядит так
Мой класс фильтра происходит от javax.servlet.filter, и я пишу свой код в методе doFilter:
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException { // ... }
И в какой-то момент я понимаю, что должен ответить клиенту с кодом состояния http 401, а также хочу предоставить ему информацию в формате xml или json о том, что произошло. Теперь мне кажется, что я тоже могу
1) Используйте ServletResponse: это позволяет мне получить OutputStream и записать мой xml/json. Однако я вообще не могу установить код состояния http. Окончательный ответ, поступающий клиенту, содержит некоторые заголовки http.
2) Приведите ServletResponse к HttpServletResponse: это позволяет мне установить код состояния, но я, похоже, не могу установить тело ответа, но пусть тело ответа обрабатывается из tomcat.
В любом случае кажется неполным. Если я использую ServletResponse для записи в OutputStream, а затем привожу к HttpServletResponse, а затем вызываю sendError(401) - надеясь, что все, что я написал в OutputStream, достигнет клиента - мой ответ не содержит http "строку состояния". Однако присутствуют заголовки http, такие как «Сервер: Apache-Coyote/1.1».
любая помощь приветствуется...