问题
@RequestParam
和@PathVariable
处理特殊字符时有什么区别?+
被@RequestParam
as空间接受。如果是8965656551,+
则被接受为+
。
#1 热门回答(375 赞)
- @PathVariable是从URI获取一些占位符(Spring称之为URI模板) - 参见Spring参考章节16.3.2.2 URI模板模式
- @RequestParam也是从URI获取参数 - 请参阅Spring参考章节16.3.3.3使用@RequestParam将请求参数绑定到方法参数
如果URLhttp://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) {
...
}
此外,请求参数可以是可选的,从Spring 4.3.3路径变量can be optional as well开始。请注意:这可能会更改URL路径层次结构并引入请求映射冲突。例如,will/user/invoices
是否为usernull
提供了有关ID为"发票"的用户的详细信息?
#2 热门回答(70 赞)
@RequestParamannotation用于从请求中访问查询参数值。查看以下请求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 - 要绑定的参数的名称
- required - 参数是否是必需参数。如果是,则无法发送该参数将失败。
- value - 这是name属性的别名
@PathVariable
@PathVariableidentifies传入请求的URI中使用的模式。我们来看看下面的请求网址:
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 360061734annotation只有一个用于绑定请求URI模板的属性值。允许在单个方法中使用多个@PathVariableannotation。但是,请确保只有一种方法具有相同的模式。
另外还有一个有趣的注释:@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
以及它的Controller方法
@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" >
#3 热门回答(0 赞)
它可能是application / x-www-form-urlencoded midia类型转换空间为****,并且接收方将通过将****转换为space来解码数据。检查网址以获取更多信息.http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1