当前位置: 首页 > 知识库问答 >
问题:

Spring Rest路径与@PathVariable和@MatrixVariable

鞠凌龙
2023-03-14

我使用的是Spring4.1.9.版本

配置下一个Rest控制器。

并创建了/get/{id}以某种方式隐藏/get/matrix/{vars}的映射

当我尝试通过下一个url调用它时http://localhost:8080/testmatrixvariables/get/matrix/;v1=1;v2=2;v3=3我从调试日志中获得

org.html" target="_blank">springframework.beans.TypeMisMatchException:无法将类型[java.lang.String]的值转换为所需的类型[long];嵌套异常是java.lang.NumberFormatException:对于输入字符串:“Matrix”

似乎是尝试从我的url解析{id},但不是/get/matrix/{vars}

在同一时间下一次调用完全工作http://localhost:8080/testmatrixvariables/getmatrix/;v1=1;v2=2;v3=3和http://localhost:8080/testmatrixvariables/get/1同样工作良好,http://localhost:8080/testmatrixvariables/get/anotherpathvariable/2同样工作

所以只有当@pathvariable和@matrixvariable之间存在冲突时才会出现问题

http://localhost:8080/testmatrixvariables/get/matrix/;v1=1;v2=2;v3=3

@RestController
@RequestMapping(value = "/testMatrixVariables")
public class TestController {

    @RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
    public
    @ResponseBody
    ResponseEntity<String> getByPathVariable(@PathVariable("id") long v1) {
        return ResponseEntity.ok("ok" + v1);
    }

    @RequestMapping(value = "/get/anotherPathVariable/{id}", method = RequestMethod.GET)
    public
    @ResponseBody
    ResponseEntity<String> getAnotherPathVariableByPathVariable(@PathVariable("id") long v1) {
        return ResponseEntity.ok("ok" + v1);
    }


    @RequestMapping(value = "/getMatrix/{vars}", method = RequestMethod.GET)
    public @ResponseBody ResponseEntity<String> getMatrix(
            @MatrixVariable(pathVar = "vars", required = true) String v1,
            @MatrixVariable(pathVar = "vars", required = true) String v2,
            @MatrixVariable(pathVar = "vars", required = true) String v3) {
        return ResponseEntity.ok("ok" + v1 + v2 + v3);
    }

    @RequestMapping(value = "/get/matrix/{vars}", method = RequestMethod.GET)
    public @ResponseBody ResponseEntity<String> getGetMatrix(
            @MatrixVariable(pathVar = "vars", required = true) String v1,
            @MatrixVariable(pathVar = "vars", required = true) String v2,
            @MatrixVariable(pathVar = "vars", required = true) String v3) {
        return ResponseEntity.ok("ok" + v1 + v2 + v3);
    }

}

共有1个答案

年高洁
2023-03-14

这不起作用,因为默认情况下禁用了矩阵变量。可以通过两种方式启用它:

>

  • 将RequestMappingHandlerMapping的removeSemicolonContent属性设置为false。默认情况下,它被设置为true。例如:Handler.SetRemoveSemicolonContent(false);

    或者如果您使用的是xml配置,则可以按照

    <mvc:annotation-driven enable-matrix-variables="true"/> 
    

  •  类似资料:
    • 在处理特殊字符时,和有什么区别? 被接受为空格。 在的情况下,被接受为。

    • 问题内容: 如果使用绝对路径,则无法将整个目录移动到新位置。如果使用相对路径,则无法将单个文件移动到新位置。 这里有什么解决方案?您是否设置了一个包含根路径并从那里开始的配置文件?还是您有类似的规则:永不移动文件? 我在某些项目中看到人们使用dirname( FILE )。我的意思是,为什么不简单地将其删除,因为目录名还是相对的(取决于文件所在的位置)? 问题答案: 您应该使用一个配置文件,该配置

    • 问题内容: 和处理特殊字符之间有什么区别? 被空间接受。 在的情况下,被接受为。 问题答案: 是从URI(Spring称为URI模板)中获取一些占位符—请参见Spring参考第16.3.2.2章URI模板模式 也是要从URI中获取参数—请参见第16.3.3.3章,使用@RequestParam将请求参数绑定到方法参数 如果该网址http://localhost:8080/MyApp/user/12

    • 问题- 我的解决方案- 输出- 输入:[1,-2,-3,1,3,-2,null,-1]3输出:应为真:假 我真的不知道我在这方面出了什么问题。我尝试玩int和整数类型选项的结果,但它不工作。请帮忙。

    • 主要内容:什么是当前工作目录,什么是绝对路径与相对路径,Python处理绝对路径和相对路径在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。 什么是当前工作目录 每个运行在计算机上的程序,都有一个“当前工作目录”(或 cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。 注意,虽然文件夹是目录的更新的名称,但当前工作目录(或当前目录)是标准术语,没有当前工作文件夹这种说法。 在 Python 中,利用 os.getcwd() 函数可以取得当前工作路径的字

    • 在 Linux 中,简单的理解一个文件的路径,指的就是该文件存放的位置,例如,在《 Linux文件系统的层次结构》中提到的 /home/cat 就表示的是 cat 文件所存放的位置。只要我们告诉 Linux 系统某个文件存放的准确位置,那么它就可以找到这个文件。 指明一个文件存放的位置,有 2 种方法,分别是使用 绝对路径和 相对路径。 我们知道,Linux 系统中所有的文件(目录)都被组织成以根