Owijarka filtra serwletów - problem ze zmianą typu zawartości
Mam usługę WWW RESTful, która jest używana przez javascript. Ta usługa zwraca typ zawartości „aplikacja / json”. Jednak dla IE typem treści musi być „text / html”. Napisałem więc filtr i opakowanie, aby zmienić typ zawartości, gdy IE zostanie wykryty jako klient. Moja logika wydaje się nie mieć wpływu na typ zawartości. Co ja robię źle?
Filtr:
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 {}
}
Opakowanie:
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;
}
}