@RequestMapping("pic.html") public String pic(ModelMap map, HttpServletResponse response) {
response.addHeader("Cache-Control", "public,max-age=310"); long expires = new Date().getTime() + 10 * 60 * 1000;
response.setDateHeader("Expires", expires);
response.setHeader("Etag", "12345");
map.put("test", "testPic"); return "json";
}现在我需要做浏览器缓存:请求一个url时,如果有缓存,就不访问后台像这样,我设置Cache-Control,但是浏览器中出现这样的情况。设置的参数并没有覆盖,然后缓存也不起效果;请求仍然访问后台
1 回答
倚天杖
TA贡献1828条经验 获得超3个赞
使用的是SpringMVC,将“json”字符串配置成了一个view Bean。
<!-- defined view by name --> <!-- 将“json”配置成一个view --> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> <property name="order" value="4" /> </bean> <bean id="json" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
然后查看MappingJackson2JsonView源代码发现,父类中有个参数disableCaching默认为ture。
注解:Default is {@code true}, which will prevent the client from caching the generated JSON (这将阻止客户端缓存生成的JSON)
所以找到了设置Cache-Control:no-cache, no-store, max-age=0的地方
修改方法:
增加一个bean配置,修改disableCaching值
<bean id="jsonCanCache" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" > <property name="disableCaching" value="false"></property> </bean>
java代码中最后返回新的字符串:return "jsonCanCache";
添加回答
举报
0/150
提交
取消