@RequestParam和@PathVariable在处理特殊字符时有什么区别?
+被@RequestParam接受为空格。
在@PathVariable的情况下,+被接受为+。
@RequestParam和@PathVariable在处理特殊字符时有什么区别?
+被@RequestParam接受为空格。
在@PathVariable的情况下,+被接受为+。
当前回答
可能是application/x-www-form-urlencoded midia类型将空格转换为+,而接收方将通过将+转换为空格来解码数据。更多信息请查看网址: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) {
}
用于从请求中访问查询参数值的@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 -要绑定的参数名称 required -参数是否为必选项。如果为true,则发送该参数失败。 value -这是name属性的别名
@PathVariable
@PathVariable标识URI中用于传入请求的模式。让我们看看下面的请求URL:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=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
以及它的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" >
@RequestParam:我们可以说它是一个类似键值对的查询参数 @PathVariable:它来自URI
可能是application/x-www-form-urlencoded midia类型将空格转换为+,而接收方将通过将+转换为空格来解码数据。更多信息请查看网址:http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
这两个注释的行为完全相同。
只有2个特殊字符!'和'@'被注释@ pathvariable和@ requestparam接受。
为了检查和确认行为,我创建了一个只包含1个控制器的spring引导应用程序。
@RestController
public class Controller
{
@GetMapping("/pvar/{pdata}")
public @ResponseBody String testPathVariable(@PathVariable(name="pdata") String pathdata)
{
return pathdata;
}
@GetMapping("/rpvar")
public @ResponseBody String testRequestParam(@RequestParam("param") String paramdata)
{
return paramdata;
}
}
点击以下请求,我得到了相同的响应:
localhost: 7000 / pvar /!@#$%^&*()_+-=[]{}|;':",./<>? localhost: 7000 / rpvar ?停止 =!@#$%^&*()_+-=[]{}|;':",./<>?
在两个请求中都收到了!@作为响应