vlambda博客
学习文章列表

你会这些 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 请求访问,直接抛出异常,如下图所示。

你会这些 Spring MVC 常用注解吗?

其他几种请求类型同理,我们常用的是 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 方法。

你会这些 Spring MVC 常用注解吗?
你会这些 Spring MVC 常用注解吗?
你会这些 Spring MVC 常用注解吗?

上述是 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 常用注解吗?
你会这些 Spring MVC 常用注解吗?

Spring MVC 也支持 RESTful 风格的 URL 参数获取

@RequestMapping(value="rest/{name}")
public String restTest(@PathVariable("name") String name){
    System.out.println(name);
    return "index";
}

将参数列表的注解改为 @PathVariable("name") 即可,非常简单。

你会这些 Spring MVC 常用注解吗?
你会这些 Spring MVC 常用注解吗?

映射 Cookie

Spring MVC 通过映射可以直接在业务方法中获取 Cookie 的值。

@RequestMapping("/cookieTest")
public String getCookie(@CookieValue(value="JSESSIONID") String sessionId){
    System.out.println(sessionId);
    return "index";
}
你会这些 Spring MVC 常用注解吗?
你会这些 Spring MVC 常用注解吗?
你会这些 Spring MVC 常用注解吗?

使用 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 常用注解吗?
你会这些 Spring MVC 常用注解吗?

有的读者写到这可能会发现自己的程序中文乱码了,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";
}
你会这些 Spring MVC 常用注解吗?
你会这些 Spring MVC 常用注解吗?

转发:

@RequestMapping("forwardTest")
public String forwardTest(){
    return "forward:/index.jsp";
}
你会这些 Spring MVC 常用注解吗?

总结

本文讲解了 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 全家桶核心模块!

订阅专栏,即可进群与作者交流