我有一个Spring Boot Web应用程序,可以从服务器中的静态文件位置提供文件。
我已经在属性文件中指定了位置,并使用它来配置ResourceHandlerRegistry
。
@SpringBootApplication
public class MyWebApplication {
@Value("${targetdirectory}")
private String targetDirectory;
@Bean
WebMvcConfigurer configurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
targetDirectory = StringUtils.appendIfMissing(targetDirectory, "/", "/");
targetDirectory = StringUtils.prependIfMissing(targetDirectory, "file:/", "file:/");
registry.addResourceHandler("/resourcetarget/**").addResourceLocations(targetDirectory);
}
};
}
public static void main(String[] args) {
SpringApplication.run(MyWebApplication.class, args);
}
}
一切正常。现在,我必须根据用户输入动态设置资源位置。
加载应用程序之后,用户将触发HTTP发布请求,他可以在其中指定可用作资源位置的目录。
因此,之后对/resourcetarget/**
的所有请求都应映射到用户指定的目录。以下是我拥有的控制器。
@RestController
@RequestMapping(value = "api/locations", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class MyController {
@PostMapping
public ResponseEntity<Object> handleLocationSet(@RequestBody LocationDTO locationDto) {
String newFileLocation = locationDto.getLocation();
// How do I update the ResourceHandlerRegistry mapping for /resourcetarget/**
// with the new location received here?
return ResponseEntity.ok();
}
}
如何为静态资源URL更新此动态位置的映射。请帮助