最后
文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。
-
RequestMapping属性介绍
-
- 1、name
-
2、value
-
3、path
-
4、method
-
5、params
-
6、headers
-
7、consumes
-
8、produces
在日常java面试中springMVC已经是必不可少的一环了,昨天与几位朋友交流了一下面试SpringMVC框架时的心得。
我们发现大部分面试者仅了解SpringMVC的执行流程和组件这第一层,有些确实说的有模有样,也有些比较糊弄,但当追问到SpringMVC注解(Annotation)具体实现部分时,多显得异常狼狈。
因此,我在这记录一下我们常考查的注解实战性问题之一:
@RequestMapping注解的属性有哪些?分别都是干什么用的?
设想:如果是你回答这个问题,你有几成把握
RequestMapping接口的源码如下,里面定义了八个属性(Spring4.3.8)。
注:SpringMVC在4.1版本对RequestMapping属性做了相应调整,去掉了path属性。
@Target({ElementType.METHOD, ElementType.TYPE}) // 可以在方法和类的声明中使用
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String name() default “”;// 指定映射的名称
@AliasFor(“path”)
String[] value() default {}; // 指定请求路径的地址
@AliasFor(“value”)
String[] path() default {}; // 指定请求路径的地址
// 指定请求的方式,是一个RequsetMethod数组,可以配置多个方法
RequestMethod[] method() default {};
// 指定参数的类型
String[] params() default {};
// 指定请求头内容
String[] headers() default {};
// 指定数据请求的格式
String[] consumes() default {};
// 指定返回的内容类型
String[] produces() default {};
}
-
如上源码所示,在@Target中有两个属性,分别为 ElementType.METHOD 和 ElementType.TYPE ,也就是说@RequestMapping 可以在方法和类的声明中使用
-
可以看到注解中的属性除了 name() 返回的字符串,其它的方法均返回数组,也就是可以定义多个属性值,例如 value() 和 path() 都可以同时定义多个字符串值来接收多个URL请求
1、name
此处name属性,相当于方法的注释,使方法更易理解
@RequestMapping(value = “login”,name = “用户登录”)
@ResponseBody
public String login() {
return “success”;
}
官方文档说:它能让你非常方便的在JSP页面上使用它,形如这样子可以直接通过静态页面调用:
<%@ taglib uri=“http://www.springframework.org/tags” prefix=“s” %>
…
Get Address
2、value
@Controller
@RequestMapping(“user”) //此处如果不省略,则为@RequestMapping(value=“user”)
public class UserController {
@RequestMapping(“login”)
@ResponseBody
public String login() {
return “success”;
}
}
指定请求的实际地址,指定的地址可以是URI 模板模式(Template Pattern);
由于value属性是@RequestMapping注释的默认属性,因此如果只有唯一的属性,则可以省略该属性名,如果有超过一个属性,则必须写上value属性名称。即如下两个标注含义一样
@RequestMapping(value=“login”)
@RequestMapping(“login”)
value属性支持通配符匹配:
@RequestMapping(value=“login/*”);
即:http://localhost:8080/login/1或者http://localhost:8080/login/hahaha都能够正常访问该接口
此处通过URL:http://localhost:8080/user/login进行访问,将由login()方法进行处理
3、path
与value同义,path(value)(path 和 value 互相引用,参见RequestMapping接口源码)
path属性,和1中的value属性使用一致,两者都是用来作为映射使用的。
@RequestMapping(value=“login”)、@RequestMapping(path=“login”),这两种情况都能对login()方法进行访问
path属性支持通配符匹配:
@RequestMapping(path=“login/*”);
即:http://localhost:8080/login/1或者http://localhost:8080/login/abc都能够正常访问
4、method
指定请求类型, 如GET、POST、PUT、DELETE等;
@RequestMapping(value = “login”,method = RequestMethod.GET)
@ResponseBody
public String login() {
return “success”;
}
以上方法表示,该方法只支持GET请求。
此处也可以为
@RequestMapping(value = “login”,method = {RequestMethod.GET,RequestMethod.POST})
写在最后
为了这次面试,也收集了很多的面试题!
以下是部分面试题截图
T,RequestMethod.POST})
写在最后
为了这次面试,也收集了很多的面试题!
以下是部分面试题截图
[外链图片转存中…(img-tYGBqrVS-1715301098442)]