如果客户端提交的请求参数数量较少,且参数之间没有相关性,则可以选择将各请求参数声明为处理请求的方法的参数,并且,参数的类型可以按需设计。
如果客户端提交的请求参数略多(达到2个或以上),且参数之间存在相关性,则应该将这些参数封装到自定义的POJO类型中,并且,使用此POJO类型作为处理请求的方法的参数,同样,POJO类中的属性的类型可以按需设计。
关于请求参数的值:
-
如果客户端没有提交对应名称的请求参数,则方法的参数值为
null
-
如果客户端提交了对应名称的请求参数,但是没有值,则方法的参数值为空字符串(
""
),如果方法的参数是需要将字符串转换为别的格式,但无法转换,则参数值为null
,例如声明为Long
类型时 -
如果客户端提交对应名称的请求参数,且参数有正确的值,则方法的参数值为就是请求参数值,如果方法的参数是需要将字符串转换为别的格式,但无法转换,则会抛出异常
另外,还推荐将某些具有唯一性的(且不涉及隐私)参数设计到URL中,使得这些参数值是URL的一部分!例如:
https://blog.csdn.net/weixin_407563/article/details/854745877
https://blog.csdn.net/qq_3654243299/article/details/847462823
Spring MVC框架支持在设计URL时,使用{名称}
格式的占位符,实际处理请求时,此占位符位置是任意值都可以匹配得到!
例如,将URL设计为:
@RequestMapping("/delete/{id}")
在处理请求的方法的参数列表中,用于接收占位符的参数,需要添加@PathVariable
注解,例如:
public String delete(@PathVariable Long id) {
// 暂不关心方法内部的实现
}
如果{}
占位符中的名称,与处理请求的方法的参数名称不匹配,则需要在@PathVariable
注解上配置占位符中的名称,例如:
@RequestMapping("/delete/{albumId}")
public String delete(@PathVariable("albumId") Long id) {
// 暂不关心方法内部的实现
}
在配置占位符时,可以在占位符名称的右侧,可以添加冒号,再加上正则表达式,对占位符的值的格式进行限制,例如:
@RequestMapping("/delete/{id:[0-9]+}")
如果按照以上配置,仅当占位符位置的值是纯数字才可以匹配到此URL!
并且,多个不冲突有正则表达式的占位符配置的URL是可以共存的!例如:
@RequestMapping("/delete/{id:[a-z]+}")
以上表示的是“占位符的值是纯字母的”,是可以与以上“占位符的值是纯数字的”共存!
另外,某个URL的设计没有使用占位符,与使用了占位符的,是允许共存的!例如:
@RequestMapping("/delete/test")
Spring MVC会优先匹配没有使用占位符的URL,再尝试匹配使用了占位符的URL。