你会这些 Spring MVC 常用注解吗?
Spring MVC 框架为开发者提供了功能强大的注解机制,可以帮助我们简化代码的开发,提高开发效率,同时使得程序具备更好的扩展性,下面我们就来详细讲解 Spring MVC 框架中常用注解的具体使用。
@RequestMapping
Spring MVC 通过 @RequestMapping 注解将 URL 请求与业务方法进行映射,在控制器的类定义处以及方法定义处都可添加 @RequestMapping,在类定义处添加 @RequestMapping 注解,相当于多了一层访问路径。
@Controller
@RequestMapping("/helloHandler")
public class HelloHandler {
@RequestMapping(value="hello")
public String hello(){
System.out.println("hello world");
return "index";
}
}
@RequestMapping 常用参数
@RequestMapping("hello")
public String hello(){
System.out.println("hello world");
return "index";
}
等于
@RequestMapping(value="hello")
public String hello(){
System.out.println("hello world");
return "index";
}
(2)method:指定请求的 method 类型,包括 GET、POST、PUT、DELETE 等。
@RequestMapping(value="/postTest",method=RequestMethod.POST)
public String postTest(){
System.out.println("postTest");
return "index";
}
上述代码表示只有 POST 请求可以访问该方法,若使用 GET 请求访问,直接抛出异常,如下图所示。
其他几种请求类型同理,我们常用的是 GET 和 POST 请求,在 REST 架构中会使用到 PUT 和 DELETE 请求。
(3)params:指定 request 中必须包含的参数值,否则无法调用该方法。
@RequestMapping(value="paramsTest",params={"name","id=10"})
public String paramsTest(){
System.out.println("paramsTest");
return "index";
}
URL 请求中必须包含 name 和 id 两个参数,并且 id 的值必须为 10,才能调用 paramsTest 方法。
上述是 3 种常见的错误,都不满足 request 同时包含 name 和 id 参数,并且 id=10 的条件,因此均无法正常访问业务方法。
参数绑定
params 是对 URL 请求的参数进行限制,不满足条件的 URL 无法访问业务方法,这个特性并不是我们开发中常用的技术点,需要用到的是在业务方法中获取 URL 的参数,实现这一操作很简单,两步完成:
(1)在业务方法定义时声明参数列表;
(2)给参数列表添加 @RequestParam 注解。
@RequestMapping(value="paramsBind")
public String paramsBind(@RequestParam("name") String name,@RequestParam("id") int id){
System.out.println(name);
int num = id+10;
System.out.println(num);
return "index";
}
将 URL 请求的参数 name 和 id 分别映射给形参 name 和 id,同时进行了数据类型的转换,URL 参数都是 String 类型的,Spring MVC 可以自动根据形参的数据类型完成数据类型转换,比如将 id 转换为 int 类型,因此可以看到打印的 num 值为 20,完成了数学运算,说明已经进行了数据类型转换,具体的数据类型转换工作是由 HandlerAdapter 来完成的。
Spring MVC 也支持 RESTful 风格的 URL 参数获取
@RequestMapping(value="rest/{name}")
public String restTest(@PathVariable("name") String name){
System.out.println(name);
return "index";
}
将参数列表的注解改为 @PathVariable("name") 即可,非常简单。
映射 Cookie
Spring MVC 通过映射可以直接在业务方法中获取 Cookie 的值。
@RequestMapping("/cookieTest")
public String getCookie(@CookieValue(value="JSESSIONID") String sessionId){
System.out.println(sessionId);
return "index";
}
使用 POJO 绑定参数
Spring MVC 会根据请求参数名和 POJO 属性名进行匹配,自动为该对象填充属性值,并且支持属性级联,具体操作如下所示。
(1)创建实体类 Address、User 并进行级联设置
public class Address {
private int id;
private String name;
}
public class User {
private int id;
private String name;
private Address address;
}
(2)创建 addUser.jsp
<form action="addUser" method="post">
编号:<input type="text" name="id"/><br/>
姓名:<input type="text" name="name"/><br/>
地址:<input type="text" name="address.name"/><br/>
<input type="submit" value="提交"/>
</form>
(3)业务方法
@RequestMapping("/addUser")
public String getPOJO(User user){
System.out.println(user);
return "index";
}
(4)运行
有的读者写到这可能会发现自己的程序中文乱码了,Spring MVC 解决中文乱码很简单,在 web.xml 中添加过滤器即可,如下所示。
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
JSP 页面的转发和重定向
Spring MVC 默认以转发的形式响应 JSP,也可以手动进行修改,重定向:
@RequestMapping("redirectTest")
public String redirectTest(){
return "redirect:/index.jsp";
}
转发:
@RequestMapping("forwardTest")
public String forwardTest(){
return "forward:/index.jsp";
}
总结
本文讲解了 Spring MVC 常用注解的使用方法,主要应用于客户端到服务器端的请求映射,包括请求名称、请求类型、请求参数等。完成了 MVC 设计模式中 V(View)—— C(Controller)的映射,省去了在 XML 文件中繁琐的映射配置。
毫无疑问,Spring 全家桶是当前非常流行的主流框架,也是 Java 开发者的必备技能,无论你是初级菜鸟还是有一定经验的老鸟,都应该好好学习 Spring 全家桶的使用。
《案例上手 Spring 全家桶》希望提供一站式服务,将 Spring 全家桶的核心模块一次性全部讲清楚,并结合实战案例让读者能够快速掌握实际开发的能力。以输出为结果导向是最高效的学习方法。即将学习到的全家桶成员包括:
-
Spring Framework -
Spring Web MVC -
Spring Boot -
Spring Cloud -
Spring Data -
Spring Security
你将获得什么:
-
Spring 全家桶 核心模块的实际应用 -
100+ 段 经典代码示例,快速理解 Spring 全家桶要领 -
3 大 项目实战,掌握 Spring 全家桶实际应用 -
精选 70 道 Spring 高频面试题评估学习成果 -
16+ 小时的 Spring 实战视频 -
进入 Spring 技术社群
即日起至 4 月 14 日,《案例上手 Spring 全家桶》专栏限时特惠!现在订阅专栏,即可加入专属交流群,让你一站式透视 Spring 全家桶核心模块!