Springboot动态修改ResourceHandlerRegistry映射

时间:2019-09-20 10:02:32

标签: java spring-boot

我有一个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更新此动态位置的映射。请帮助

0 个答案:

没有答案