Spring MVC 的常用注解
Posted 好多个码农
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring MVC 的常用注解相关的知识,希望对你有一定的参考价值。
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 常用参数
(1)value:指定 URL 请求的实际地址,是 @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";
}
通过地址栏可以看到,地址改变,实现了重定向跳转。需要注意的是业务方法中,设置重定向不能写逻辑视图,必须写明目标资源的物理路径,如 "redirect:/index.jsp"。
转发:
@RequestMapping("forwardTest")
public String forwardTest(){
return "forward:/index.jsp";
}
可以看到请求前后,地址栏没有改变,实现了转发跳转。
总结
本讲讲解了 Spring MVC 常用注解的使用方法,主要应用于客户端到服务器端的请求映射,包括请求名称、请求类型、请求参数等。完成了 MVC 设计模式中 V(View)—— C(Controller)的映射,省去了在 XML 文件中繁琐的映射配置。
以上是关于Spring MVC 的常用注解的主要内容,如果未能解决你的问题,请参考以下文章