Servlet-Filter-Wrapper - Probleme beim Ändern des Inhaltstyps
Ich habe einen RESTful-Webdienst, der von Javascript verwendet wird. Dieser Dienst gibt den Inhaltstyp "application / json" zurück. Für IE muss der Inhaltstyp jedoch "text / html" sein. Also habe ich einen Filter und einen Wrapper geschrieben, um den Inhaltstyp zu ändern, wenn der IE als Client erkannt wird. Meine Logik scheint keine Auswirkungen auf den Inhaltstyp zu haben. Was mache ich falsch?
Der Filter:
public class IE8Filter implements Filter {
private Logger logger = LoggerHelper.getLogger();
@Override
public void destroy() {}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String userAgent = request.getHeader("User-Agent");
logger.debugf("User Agent = '%s'", userAgent);
IE8FilterResponseWrapper wrapper = new IE8FilterResponseWrapper(response);
chain.doFilter(req, wrapper);
if (userAgent.contains("MSIE 8") || userAgent.contains("MSIE 7")) {
wrapper.setContentType("text/html");
logger.debugf("Content Type = '%s'", wrapper.getContentType());
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {}
}
Die Verpackung:
public class IE8FilterResponseWrapper extends HttpServletResponseWrapper {
private String contentType;
public IE8FilterResponseWrapper(HttpServletResponse response) {
super(response);
}
public void setContentType(String type) {
this.contentType = type;
super.setContentType(type);
}
public String getContentType() {
return contentType;
}
}