Я кодировал свой собственный фильтр Spring, чтобы кодировать в UTF-8 все ответы, кроме изображений:
package my.local.package.filter;
public class CharacterEncodingFilter extends org.springframework.web.filter.CharacterEncodingFilter
{
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException
{
if(!request.getRequestURI().endsWith("jpg") &&
!request.getRequestURI().endsWith("png") &&
!request.getRequestURI().endsWith("gif") &&
!request.getRequestURI().endsWith("ico"))
{
super.doFilterInternal(request, response, filterChain);
}
filterChain.doFilter(request, response);
}
}
Я ссылаюсь на это в web.xml:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>my.local.package.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Все работает как положено, файлы jpg / png / gif / ico не кодируются в UTF-8, в то время как все остальные файлы.
Я сейчас пытаюсь кодировать простой контроллер, который должен возвращать ошибку 404 при определенных условиях:
@Controller
public class Avatar
{
@RequestMapping("/images/{width}x{height}/{subject}.jpg")
public void avatar(HttpServletResponse response,
@PathVariable("width") String width,
@PathVariable("height") String height,
@PathVariable("subject") String subject) throws IOException
{
...
// if(error)
// {
response.sendError(HttpServletResponse.SC_NOT_FOUND, "Not found");
return;
// }
...
}
}
Но при запросе, например, /images/52x52/1.jpg я получаю страницу, содержащую эту ошибку:
java.lang.IllegalStateException: Невозможно вызвать sendError () после подтверждения ответа
Я думаю, что я неправильно закодировал фильтр (я не знаком с Spring), потому что, если я укажу org.springframework.web.filter.CharacterEncodingFilter
вместо my.local.package.filter.CharacterEncodingFilter
в файле web.xml, он отлично работает.
Может кто-нибудь мне помочь?
Спасибо.