第4章 Web开发
4.1 Web开发简介
4.2 URL映射
4.3 参数传递
4.4 数据验证
4.5 拦截器
4.6 过滤器
4.7 Web配置
4.8 实战:实现优雅的数据返回
4.2 URL映射
4.2.1 URL 路径匹配
1、精确匹配
@RequestMapping 的 value 属性用于匹配 URL 映射,value 支持简单表达式:
@RequestMapping("/getDataById/{id}")
public String getDataById(@PathVariable("id") Long id) {
return "getDataById:" + id;
}
如果URL中的参数名称与方法中的参数名称一致,则可以简化为:
@RequestMapping("/getDataById/{id}")
public String getDataById(@PathVariable Long id) {
return "getDataById:" + id;
}
2、通配符匹配
@RequestMapping 支持使用通配符匹配 URL,用于统一映射某些 URL 规则类似的请求。
@RequestMapping("/getJson/*.json")
public String getJson() {
return "get Json data";
}
上面示例中,当在浏览器请求 /getJson/a.json 或者 /getJson/b.json 时,都会匹配到后台的getJson方法。
@RequestMapping 的通配符匹配非常简单实用,支持 “*”、“?”、“**” 等通配符。使用时需要了解通配符的使用规则,否则容易出错。
通配符匹配规则如下:
(1)符号”*“匹配任意字符,符号”**“匹配任意路径,符号”?“匹配单个字符。
(2)有通配符的优先级低于没有通配符的,比如 /user/add.json 比 /user/*.json 优先匹配。
(3)有”**“通配符的优先级低于有”*“通配符的。
4.3.2 Method 匹配
HTTP 请求的 Method 有 GET、POST、PUT、DELETE 等方式。
(1)GET:用于获取URL对应的数据
(2)POST:用于提交后天数据
(3)HEAD:类型为GET,不返回消息体,用于返回对应的URL的元信息
(4)PUT:类型为POST,对同一个数据多次进行PUT操作不会导致数据改变
(5)DELETE:删除操作
(6)PATCH:类似于PUT操作,表示信息的局部更新
对于Web应用,GET和POST是经常使用的选项,而对于 RESTful接口,则会使用PUT、DELETE等从语义上进一步区分的操作。
@RequestMapping(value = "getData", method = RequestMethod.GET)
public String getData() {
return "RequestMethod GET";
}
@RequestMapping(value = "getData", method = RequestMethod.POST)
public String postData() {
return "RequestMethod POST";
}
4.3.3 consumes 和 produces 匹配
@RequestMapping 注解提供了 consumes 和 produces 参数用于验证 HTTP 请求的 内容类型 和 返回类型。
(1)consumes 表示请求的 HTTP 头的 Content-Type 媒体类型与 consumes 的值匹配才可以调用方法。
(2)produces 表示HTTP 请求中的 Accept 字段只有匹配成功才可以调用。
//处理 request Content-Type 为“application/json”类型的请求
@RequestMapping(value = "/Content", method = RequestMethod.POST, consumes = "application/json")
public String Consumes(@RequestBody Map param) {
return "Consumes POST Content-Type=application/json";
}
4.3.4 params 和 header 匹配
1、params
(1)params={“username”}, 存在“username”参数时通过。
(2)params={“!password”}, 不存在”password“参数时通过。
(3)params={“age=20”},参数age等于20时通过。
@RequestMapping(value = "paramsTest", params = "action=save")
public String paramsTest(@RequestBody Map param) {
return "params test";
}
备注:@RequestBody注解,则调用时需要添加请求体Body为{},同时添加请求头:Content-Type=application/json。
2、header
header 的使用和 params 类似,它检查 HTTP 的 header 头中是否有 Host=localhost:8080 的参数,如果有则匹配此方法。
@RequestMapping(value = "headerTest", headers = {"Host=localhost:8080"})
public String headerTest() {
return "header test";
}
来源:《Spring Boot 从入门到实战》学习笔记