2012-12-05 48 views

回答

335

如果URL http://localhost:8080/MyApp/user/1234/invoices?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) { 
    ... 
} 

此外,请求参数可以是可选的,但路径变量不能 - 如果它们是,它会改变URL路径层次并引入请求映射冲突。例如,/user/invoices是否会为用户null提供发票或有关ID为“发票”的用户的详细信息?

+0

@pathVariable可以使用POST请求吗? – ishanbakshi

+2

'@ PathVariable'可以用于任何RequestMethod –

+0

一个很好的例子。 – Sid

59

@RequestParam用于访问请求中查询参数值的注释。请看下面的请求URL:

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

在上述URL请求,参数1和参数的值可以由下式获得:

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

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

  • 默认值 - 这是缺省值作为备用机构,如果请求不具有值或为空。
  • - 参数的名称绑定
  • 需要 - 参数是否是强制与否。如果是,则发送该参数失败将失败。
  • - 这是名称的别名属性

@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" > 
+0

字符串(例如'userName')是否有类型不是参数?我倾向于把它变成一个变量,但它也可能是一个参数。 – cst1992

+0

..这里是原文: - http://javabeat.net/spring-mvc-requestparam-pathvariable/ –

-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) { 

}