Instead of using filter, you could create a custom view class that extends FreeMarkerView and applies custom formatting after the view is rendered. Benefit is that it will only apply to responses that were created from freemarker views (which I assume is what you want).
public class CustomFreeMarkerView extends FreeMarkerView {
@Override
protected void processTemplate(Template template, SimpleHash model, HttpServletResponse response) throws IOException, TemplateException {
StringWriter writer = new StringWriter();
template.process(model, writer);
String formattedTemplate = formatTemplate(writer.toString());
response.getWriter().write(formattedTemplate);
}
private String formatTemplate(String renderedTemplate) {
//do custom formatting of the renderedTemplate here
return renderedTemplate;
}
}
Once you apply your formatting in formatTemplate
you can wire in your custom view in view resolver:
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver" autowire="no">
<property name="viewClass" value="com.example.CustomFreeMarkerView" />
...
</bean>
In JavaConfig it would look something like this:
@Bean
public FreeMarkerViewResolver freeMarkerViewResolver() {
FreeMarkerViewResolver fvr = new FreeMarkerViewResolver();
fvr.setViewClass(CusotmFreeMarkerView.class);
...
}