@RequestParam vs @PathVariable

在处理特殊字符时, @PathVariable@PathVariable什么区别? +@RequestParam接受为空间。 在@PathVariable情况下, +被接受为+

  • @PathVariable是从uri中获取一些占位符(Spring称之为URI模板) – 请参见第16.3.2.2节“Spring参考”URI模板模式
  • @RequestParam是获取一个参数的方法 – 请参阅Spring Reference第16.3.3.3节使用@RequestParam将请求参数绑定到方法参数

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

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

此外,请求参数可以是可选的,但是pathvariables不能 – 如果是的话,它会改变URLpath层次并引入请求映射冲突。 例如,would /user/invoices提供用户null的发票或ID为“invoices”的用户的详细信息?

用于访问请求中的查询参数值的@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 – 要绑定的参数的名称
  • 必需 – 参数是否是强制性的。 如果这是真的,则发送该参数失败将失败。
  • – 这是name属性的别名

@PathVariable

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

HTTP://本地主机:8080 /用SpringMVC /你好/ 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://本地主机:8080 / spring_3_2 / matrixvars /股票; 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" > 

它可能是应用程序/ x-www-form-urlencoded midiatypes将空间转换为+ ,而接收器将通过将+转换为空格来解码数据。请检查url以获取更多信息。 http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1

 @PathVariable - must be placed in the endpoint uri and access the query parameter value from the request @RequestParam - must be passed as method parameter (optional based on the required property) http://localhost:8080/employee/call/7865467 @RequestMapping(value=“/call/{callId}", method = RequestMethod.GET) public List<Calls> getAgentCallById( @PathVariable(“callId") int callId, @RequestParam(value = “status", required = false) String callStatus) { } http://localhost:8080/app/call/7865467?status=Cancelled @RequestMapping(value=“/call/{callId}", method = RequestMethod.GET) public List<Calls> getAgentCallById( @PathVariable(“callId") int callId, @RequestParam(value = “status", required = true) String callStatus) { }