有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java/Spring/Angular。js将文件路径传递给控制器

我试图根据通过dirFile参数传入的路径从服务器返回一个文件。但是,我无法将dirFile参数获取到控制器

这是我在服务器上的控制器:

@RequestMapping(value="/test/getFile/{dirFile}", method = RequestMethod.GET)
public void doDownload(HttpServletRequest request, HttpServletResponse response, 
@PathVariable String dirFile) throws IOException { ...returns file }

以下是我目前打电话的方式:

<a ng-href="/Web/test/getFile/{{encodeFileURL(filetree.currentNode.id)}}">Click here to download file</a>

该参数填充fine并生成以下URL:

http://localhost:8080/Web/test/getFile/C%3A%5Capache-tomcat-7.0.54%5Clogs%5Cfile.log

在没有参数的情况下,控制器执行其工作并返回一个我硬编码的文件,但我想返回传入的文件。我似乎无法让控制器接受文件路径的参数,但它总是返回类似400错误请求的错误。我尝试了一系列不同的spring处理程序,但找不到有效的方法。我做错了什么

更新: 这和编码有关。我认为它是用UTF-8编码的,而tomcat使用的是其他东西。我将尝试以JSON或其他形式传递


共 (2) 个答案

  1. # 1 楼答案

    这可能是因为默认情况下Spring将扩展名为URL的URL视为文件名。尝试将handlerMapping的属性useSuffixPatternMatch设置为false

    如果使用Java配置:

       public RequestMappingHandlerMapping requestMappingHandlerMapping() {
            RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping();
            handlerMapping.setUseSuffixPatternMatch(false);
       }
    
  2. # 2 楼答案

    您可能需要在@PathVariable注释中设置路径变量名。 在您的情况下:@PathVariable("dirFile")