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

@RequestParam与@PathVariable

通京
2023-03-14

在处理特殊字符时,@requestparam@pathvariable有什么区别?

+@requestparam接受为空格。

@pathvariable的情况下,+被接受为+

共有3个答案

龙高超
2023-03-14

@requestParam用于查询参数(静态值),例如:http://localhost:8080/calculation/pow?base=2&ext=4

@pathvariable用于以下动态值:http://localhost:8080/calculation/sqrt/8

@RequestMapping(value="/pow", method=RequestMethod.GET)
public int pow(@RequestParam(value="base") int base1, @RequestParam(value="ext") int ext1){
    int pow = (int) Math.pow(base1, ext1);
    return pow;
}

@RequestMapping("/sqrt/{num}")
public double sqrt(@PathVariable(value="num") int num1){
    double sqrtnum=Math.sqrt(num1);
    return sqrtnum;
}
尤飞尘
2023-03-14

用于从请求访问查询参数值的@RequestParam批注。查看以下请求URL:

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

在上述URL请求中,param1和param2的值可以访问如下:

public String getDetails(
    @RequestParam(value="param1", required=true) String param1,
        @RequestParam(value="param2", required=false) String param2){
...
}

以下是@RequestParam注释支持的参数列表:

  • defaultvalue-如果请求不具有该值或为空,则这是作为回退机制的默认值。
  • Name-要绑定的参数的名称
  • required-参数是否为强制参数。如果为真,则无法发送该参数将失败。
  • 值-这是name属性的别名

@PathVariable

@pathvariable标识传入请求的URI中使用的模式。我们来看看下面的请求URL:

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

上面的URL请求可以在你的spring MVC中写成如下:

@RequestMapping("/hello/{id}")    public String getDetails(@PathVariable(value="id") String id,
    @RequestParam(value="param1", required=true) String param1,
    @RequestParam(value="param2", required=false) String param2){
.......
}

@PathVariable注释只有一个属性值用于绑定请求URI模板。允许在单个方法中使用多个@PathVariable注释。但是,请确保只有一个方法具有相同的模式。

还有一个更有趣的注释:@MatrixVariable

http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,+10.40,+3.91;AZN=236.00,+103.00,+3.29;SBRY=375.50,+7.60,+2.07

及其控制方法

 @RequestMapping(value = "/{stocks}", method = RequestMethod.GET)
  public String showPortfolioValues(@MatrixVariable Map<String, List<String>> matrixVars, Model model) {

    logger.info("Storing {} Values which are: {}", new Object[] { matrixVars.size(), matrixVars });

    List<List<String>> outlist = map2List(matrixVars);
    model.addAttribute("stocks", outlist);

    return "stocks";
  }

但必须启用:

<mvc:annotation-driven enableMatrixVariables="true" >
慕容烨
2023-03-14
  • @pathvariable是从URI(spring称它为URI模板)中获取一些占位符-参见spring参考文献第16.3.2.2章URI模板模式
  • @requestparam从URI中获取一个参数,参见《spring参考》章节16.3.3.3用@requestparam
  • 将请求参数绑定到方法参数

如果URLhttp://localhost:8080/myapp/user/1234/invotimes?date=12-05-2013获取用户1234在2013年12月5日的发票,则控制器方法将如下所示:

@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
            @PathVariable("userId") int user,
            @RequestParam(value = "date", required = false) Date dateOrNull) {
  ...
}

此外,请求参数可以是可选的,从spring 4.3.3开始,路径变量也可以是可选的。但是要注意,这可能会改变URL路径层次结构,并引入请求映射冲突。例如,/user/发票是否提供用户null的发票或ID为“发票”的用户的详细信息?

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

  • 问题内容: 和处理特殊字符之间有什么区别? 被空间接受。 在的情况下,被接受为。 问题答案: 是要从URI(Spring称为URI模板)中获取一些占位符 也是要从URI中获取参数—请参见Spring Reference第16.3.3.3章,使用@RequestParam将请求参数绑定到方法参数 如果该网址在2013年12月5日获得了用户1234的发票,则控制器方法如下所示: 同样,请求参数可以是可

  • 我注意到Spring在Spring 4.2中改变了RequestParam将参数封送到控制器endpoint的方式。也就是说,当我有这样的东西: 以前发送的超文本标记语言输入元素的属性为空,将作为空包含在列表中。在4.2中,它们是空字符串。' 例如: 结果为空列表。 结果是

  • 问题内容: 我有这个枚举: 我想用作rest请求的参数: 当我发送这些请求时,它工作正常 但是当我发送: /events?sort=somethingElse 我在控制台中收到500条响应和以下消息: 有没有一种方法可以防止spring抛出这些异常并将enum设置为null? 编辑 Strelok接受的答案有效。但是,我决定处理MethodArgumentTypeMismatchException

  • 我对的枚举有问题。在方法中有两个枚举:和。是内置的Spring枚举,它完美地从String转换为Enum: 但是当我打电话的时候 我阅读并测试了: 带枚举的Spring的@RequestParam Spring Boot能够接受枚举作为请求参数 枚举作为Spring Boot Rest中的请求参数 如何在RequestParm中将多个值转换为枚举? @RequestParam defaultval

  • 我有一个接口方法,可以如下所示调用- 它可以接受类型的param,这样我就可以获取特定的结果。 现在,如果将paramIds保留为空,如下所示,Spring MVC将创建,大小为0,并且不会返回结果。 这是我的注释 我试图删除并使用,但无法将设置为。 现在,我将注释更改为,并在dao中添加代码将“none”处理为null--想知道是否有更好的方法来解决这个问题。 提前谢了。