【问题标题】:How to get Path variable in spring filter or java如何在spring过滤器或java中获取路径变量
【发布时间】:2021-08-09 12:14:16
【问题描述】:

我想从/v1/testId/111 示例网址获取{testId : 111}

我知道如果使用request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE)方法获取路径变量非常简单。

但是,过滤器在 Servlet 之前执行。

因此,request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE) 方法不可用。 (参考How to get Path Variables in Spring Filter?


有没有办法在过滤器中检索路径变量?

或者,没有request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE)方法有没有办法检索路径变量?

/v1/testId/111 的字符串实际上是可用的,我打算从中提取 111。

【问题讨论】:

  • 你有/v1/testId/111 作为字符串吗?
  • @Lajos Arpad 是的,/v1/testId/111 可以使用request.requestURI 方法获得。
  • 那你为什么不自己拆分uri呢?
  • 在上面的例子中,它很容易获得,但如果它变得更加复杂,那就很难了。比如/v1/testId/111/userId/222,我们如何获取{testId:111, userId:222}

标签: java spring spring-boot spring-mvc spring-security


【解决方案1】:

你正在寻找lastIndexOfString的方法。

String foo = "/v1/testId/111";
String theValue = foo.substring(foo.lastIndexOf("/") + 1);

lastIndexOf 在这种情况下返回最后一个斜杠的数字位置,从下一个数字位置获取 substring 将有效地返回最后一个斜杠之后的所有内容。

编辑

如果你有更多实例,比如/v1/testId/111/userId/222,那么你可以split你的String,比如

String string = "/v1/testId/111/userId/222";
String[] parts = string.split("/");
for (int index = 0; index < parts.length; index++) {
    if (isNumeric(parts(index))) {
        //Do something with these values as you please
        String entityName = parts[index - 1];
        String entityValue = parts[index];
    }
}

isNumeric 是这样实现的:

public static boolean isNumeric(String strNum) {
    if ((strNum == null) || (strNum.equals(""))) {
        return false;
    }
    try {
        double d = Double.parseDouble(strNum);
    } catch (NumberFormatException nfe) {
        return false;
    }
    return true;
}

感谢https://www.baeldung.com/java-check-string-number

【讨论】:

  • 如果 pathVariable 的数据类型是 String 怎么办?
  • @MuddassirRahman 它是一个字符串。我们拆分该字符串并解析结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 2021-10-18
  • 2022-10-13
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多