@RequestParam与@PathVariable

2022-08-31 04:39:15

处理特殊字符时 和 处理特殊字符时有什么区别?@RequestParam@PathVariable

+被接受为空间。@RequestParam

在 的情况下,被接受为 。@PathVariable++


答案 1

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

@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 路径层次结构并引入请求映射冲突。例如,是否会提供用户的发票或有关具有 ID“发票”的用户的详细信息?/user/invoicesnull


答案 2

@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 – 要绑定的参数的名称
  • 必需 – 参数是否为必需参数。如果为 true,则无法发送该参数将失败。
  • value – 这是 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" >

推荐