Java 资源处理程序未禁用缓存?
我已经创建了一个SpringBoot2和angular应用程序(书店应用程序-管理员可以添加新书或编辑现有书籍)。我想提供保存在Java 资源处理程序未禁用缓存?,java,spring,spring-boot,Java,Spring,Spring Boot,我已经创建了一个SpringBoot2和angular应用程序(书店应用程序-管理员可以添加新书或编辑现有书籍)。我想提供保存在resources/static/images路径中的图像。当我通过api调用添加新图像时,效果非常好,但是当我尝试用不同的图像替换图像时(当我尝试编辑书籍时),当我通过文件资源管理器检查文件夹时,图像会被替换为新图像,但当我访问链接时http://localhost:8181/images/16.png它显示旧图像。在eclipse中,如果我右键单击项目并单击刷新,则
resources/static/images
路径中的图像。当我通过api调用添加新图像时,效果非常好,但是当我尝试用不同的图像替换图像时(当我尝试编辑书籍时),当我通过文件资源管理器检查文件夹时,图像会被替换为新图像,但当我访问链接时http://localhost:8181/images/16.png
它显示旧图像。在eclipse中,如果我右键单击项目并单击刷新,则http://localhost:8181/images/16.png
显示正确的图像
为了防止这个问题,我编写了下面的代码,这样可以防止缓存静态/图像
,但它不起作用
--资源处理程序
@Configuration
public class WebConfig implements WebMvcConfigurer{
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) {
// Register resource handler for images
System.out.println("indisde cache images");
registry.addResourceHandler("/images/**").addResourceLocations("classpath:/static/images/").setCachePeriod(0);
}
}
@Configuration
public class AdditionalResourceWebConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/media/**").addResourceLocations("file:///" + System.getProperty("user.dir") + "/src/main/media/");
}
}
--弹簧应用
@springboot应用程序
公共类Bookstore应用程序实现CommandLineRunner{
@自动连线
用户服务用户服务;
公共静态void main(字符串[]args){
run(BookStoreApplication.class,args);
}
@凌驾
公共无效运行(字符串…args)引发异常{
用户user2=新用户();
user2.setUserName(“admin”);
user2.setPassword(SecurityUtility.passwordEncoder().encode(“admin”);
user2.setEmail(“admin@admin.com");
user2.setEnabled(true);
user2.setFirstName(“adminFirstName”);
user2.setLastName(“adminLastName”);
用户2.设置电话(“223456789”);
Role role2=新角色();
role2.setRoleId((长)2);
角色2.setRoleName(“角色管理”);
UserRole userRole2=新的UserRole(user2,role2);
Set userRoles2=new HashSet();
userRoles2.add(userRole2);
CreateUser(user2,userRoles2);
}
}
--控制器
@RequestMapping(value = "/add/image", method = RequestMethod.POST)
public ResponseEntity uploadImage(@RequestParam(name = "id") Long id, HttpServletRequest request,
HttpServletResponse response) throws IOException {
try {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Iterator<String> imageNames = multipartRequest.getFileNames();
System.out.println(imageNames);
MultipartFile imageMutipart = multipartRequest.getFile(imageNames.next());
byte[] imageBytes = imageMutipart.getBytes();
String imageNameNew = id + ".png";
BufferedOutputStream bout = new BufferedOutputStream(
new FileOutputStream(new File("src/main/resources/static/images/" + imageNameNew)));
bout.write(imageBytes);
bout.flush();
bout.close();
return new ResponseEntity("Upload success", HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity("Upload failed", HttpStatus.BAD_REQUEST);
}
}
我能够使用下面的资源处理程序解决这个问题
@Configuration
public class WebConfig implements WebMvcConfigurer{
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) {
// Register resource handler for images
System.out.println("indisde cache images");
registry.addResourceHandler("/images/**").addResourceLocations("classpath:/static/images/").setCachePeriod(0);
}
}
@Configuration
public class AdditionalResourceWebConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/media/**").addResourceLocations("file:///" + System.getProperty("user.dir") + "/src/main/media/");
}
}