在处理特殊字符时,@requestparam
和@pathvariable
有什么区别?
+
被@requestparam
接受为空格。
在@pathvariable
的情况下,+
被接受为+
。
@requestParam用于查询参数(静态值),例如:http://localhost:8080/calculation/pow?base=2&ext=4
@pathvariable用于以下动态值:http://localhost:8080/calculation/sqrt/8
@RequestMapping(value="/pow", method=RequestMethod.GET)
public int pow(@RequestParam(value="base") int base1, @RequestParam(value="ext") int ext1){
int pow = (int) Math.pow(base1, ext1);
return pow;
}
@RequestMapping("/sqrt/{num}")
public double sqrt(@PathVariable(value="num") int num1){
double sqrtnum=Math.sqrt(num1);
return sqrtnum;
}
用于从请求访问查询参数值的@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注释支持的参数列表:
@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
及其控制方法
@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" >
@pathvariable
是从URI(spring称它为URI模板)中获取一些占位符-参见spring参考文献第16.3.2.2章URI模板模式@requestparam
从URI中获取一个参数,参见《spring参考》章节16.3.3.3用@requestparam如果URLhttp://localhost:8080/myapp/user/1234/invotimes?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) {
...
}
此外,请求参数可以是可选的,从spring 4.3.3开始,路径变量也可以是可选的。但是要注意,这可能会改变URL路径层次结构,并引入请求映射冲突。例如,/user/发票
是否提供用户null
的发票或ID为“发票”的用户的详细信息?
问题内容: 和处理特殊字符之间有什么区别? 被空间接受。 在的情况下,被接受为。 问题答案: 是从URI(Spring称为URI模板)中获取一些占位符—请参见Spring参考第16.3.2.2章URI模板模式 也是要从URI中获取参数—请参见第16.3.3.3章,使用@RequestParam将请求参数绑定到方法参数 如果该网址http://localhost:8080/MyApp/user/12
问题内容: 和处理特殊字符之间有什么区别? 被空间接受。 在的情况下,被接受为。 问题答案: 是要从URI(Spring称为URI模板)中获取一些占位符 也是要从URI中获取参数—请参见Spring Reference第16.3.3.3章,使用@RequestParam将请求参数绑定到方法参数 如果该网址在2013年12月5日获得了用户1234的发票,则控制器方法如下所示: 同样,请求参数可以是可
我注意到Spring在Spring 4.2中改变了RequestParam将参数封送到控制器endpoint的方式。也就是说,当我有这样的东西: 以前发送的超文本标记语言输入元素的属性为空,将作为空包含在列表中。在4.2中,它们是空字符串。' 例如: 结果为空列表。 结果是
问题内容: 我有这个枚举: 我想用作rest请求的参数: 当我发送这些请求时,它工作正常 但是当我发送: /events?sort=somethingElse 我在控制台中收到500条响应和以下消息: 有没有一种方法可以防止spring抛出这些异常并将enum设置为null? 编辑 Strelok接受的答案有效。但是,我决定处理MethodArgumentTypeMismatchException
我对的枚举有问题。在方法中有两个枚举:和。是内置的Spring枚举,它完美地从String转换为Enum: 但是当我打电话的时候 我阅读并测试了: 带枚举的Spring的@RequestParam Spring Boot能够接受枚举作为请求参数 枚举作为Spring Boot Rest中的请求参数 如何在RequestParm中将多个值转换为枚举? @RequestParam defaultval
我有一个接口方法,可以如下所示调用- 它可以接受类型的param,这样我就可以获取特定的结果。 现在,如果将paramIds保留为空,如下所示,Spring MVC将创建,大小为0,并且不会返回结果。 这是我的注释 我试图删除并使用,但无法将设置为。 现在,我将注释更改为,并在dao中添加代码将“none”处理为null--想知道是否有更好的方法来解决这个问题。 提前谢了。