You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot目录文件列表接口失败:开头\路径参数问题求助

解决Spring Boot文件列表接口因参数开头反斜杠导致的失败问题

你创建了Spring Boot应用实现目录文件列表功能,相关代码如下:

Service层方法

public Set<String> listOfFilesOnPrem(String dir) {
    return Stream.of(new File(dir).listFiles())
            .filter(file -> !file.isDirectory())
            .map(File::getName)
            .collect(Collectors.toSet());
}

Controller层接口

@GetMapping("/onprem/list/files")
public ResponseEntity<Set<String>> getListOfFilesOnPrem(@RequestParam String dir) {
    return new ResponseEntity<>(service.listOfFilesOnPrem(dir), HttpStatus.OK);
}

问题:当请求参数dir以\开头(格式如\long.....\...\.....\....)时,功能执行失败,已通过调试确认问题出在开头的\上。


解决方案

  • 参数预处理:去除开头的反斜杠
    在Controller层接收参数后,直接对dir做清洗处理,去掉开头的单个或多个连续反斜杠。修改后的Controller代码:

    @GetMapping("/onprem/list/files")
    public ResponseEntity<Set<String>> getListOfFilesOnPrem(@RequestParam String dir) {
        // 替换开头所有连续的反斜杠为空
        String processedDir = dir.replaceAll("^\\\\+", "");
        return new ResponseEntity<>(service.listOfFilesOnPrem(processedDir), HttpStatus.OK);
    }
    

    注:Java中反斜杠需双重转义,正则^\\\\+用于匹配字符串开头的一个或多个反斜杠。

  • 参数校验:提前拦截非法格式
    可以通过注解添加参数校验,直接拒绝开头带反斜杠的请求,避免无效的业务处理:

    @GetMapping("/onprem/list/files")
    public ResponseEntity<Set<String>> getListOfFilesOnPrem(
            @RequestParam 
            @Pattern(regexp = "^[^\\\\].*$", message = "路径不能以反斜杠开头") 
            String dir) {
        return new ResponseEntity<>(service.listOfFilesOnPrem(dir), HttpStatus.OK);
    }
    
  • 使用Path类替代File类(更推荐)
    Java的Path类对路径的兼容性更强,支持自动标准化路径,能处理冗余分隔符问题,同时Files.list()比File.listFiles()更安全(支持自动关闭流)。修改后的Service层代码:

    public Set<String> listOfFilesOnPrem(String dir) {
        Path path = Paths.get(dir).normalize(); // 标准化路径,自动处理冗余分隔符
        try (Stream<Path> stream = Files.list(path)) {
            return stream.filter(Files::isRegularFile)
                    .map(p -> p.getFileName().toString())
                    .collect(Collectors.toSet());
        } catch (IOException e) {
            e.printStackTrace();
            return Collections.emptySet();
        }
    }
    

内容的提问来源于stack exchange,提问作者Haruri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:20:27