Я кодируются свой собственный весенний фильтр для того, чтобы кодировать в 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: Cannot call sendError() after the response has been committed
Я думаю, что я закодировал фильтр неправильно (я не испытывал с весны), потому что если я указываю org.springframework.web.filter.CharacterEncodingFilter
вместо my.local.package.filter.CharacterEncodingFilter
в файле web.xml, он отлично работает ,
Может кто-нибудь мне помочь?
спасибо.
Большое спасибо, он решил проблему! – satoshi