@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¶m2=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) { }
- 只从Spring MVC 3控制器返回string消息
- 如何实例化一个在Spring框架中使用generics的对象?
- Spring 3.1 entityManagerFactory java.lang.NoSuchFieldError:NULL错误
- 如何在Spring中自动assemblygenerics<T>的bean?
- 我可以在哪里下载Spring Framework jars而不使用Maven?
- Spring 3 Web MVC入门 – 设置一切
- 为什么我会使用Java / Spring的Scala / Lift?
- 在Spring-MVC控制器中触发404?
- spring引导,logback和logging.config属性