SpringMVC--注解
1.@RequestMapping
1.1 修饰类与方法
(1) 类定义处: 提供初步的请求映射信息。相对于 WEB 应用的根目录
(2) 方法处: 提供进一步的细分映射信息。相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL相对于 WEB 应用的根目录
1.2 请求方式
@RequestMapping 的 value --> URL
(常用) method --> 请求方法
(了解) params --> 请求参数
(了解) heads 分别表示请求的 请求头 的映射条件
method:
@RequestMapping("/springmvc")
@Controller
public class SpringmvcTest {
private static final String SUCCESS = "success";
@RequestMapping(value = "/test" ,method = RequestMethod.POST)
public String test(){
System.out.println("test");
return SUCCESS;
}
}
1.3 映射请求(了解)
Ant 风格资源地址支持 3 种匹配符:
? :匹配文件名中的一个字符
* :匹配文件名中的任意字符
**:** 匹配多层路径
eg:
@RequestMapping("/springmvc")
@Controller
public class SpringmvcTest {
private static final String SUCCESS = "success";
@RequestMapping("t/*/t")
public String test1(){
return SUCCESS;
}
}
<a href="springmvc/t/abc/t">映射请求的测试</a>
1.4 @PathVariable(映射 URL 绑定的占位符)
@RequestMapping("t1/{id}")
public String test2(@PathVariable("id") Integer id){
System.out.println(id);
return SUCCESS;
}
1.5 HiddenHttpMethodFilter 过滤器
1.5.1 四种基本操作
(1) GET 获取资源
(2) POST 新建资源
(3) PUT 更新资源
(4) DELETE 删除资源
1.5.2 发送 PUT 请求和 DELETE 请求
(1) 需要配置 HiddenHttpMethodFilter
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(2) 需要发送 POST 请求
(3) 需要在发送 POST 请求时携带一个 name="_method" 的隐藏域, 值为 DELETE 或 PUT
<form action="springmvc/testRest4/1234" method="post">
<input type="hidden" name="_method" value="PUT">
<input type="submit" value="TEST PUT">
</form>
<br><br>
<form action="springmvc/testRest3/123" method="post">
<input type="hidden" name="_method" value="DELETE"/>
<input type="submit" value="TEST DELETE"/>
</form>
1.5.3 在 SpringMVC 的目标方法中使用 @PathVariable得到 id
1.5.4 注意:如果PUT与DELETE请求发生405错误,在方法的类的上面加上注释*@ResponseBody*
1.5.5 @ResponseBody表示该方法的返回结果直接写入HTTP response body中
使用@RequestMapping后,返回值通常解析为跳转路径,
加上@ResponseBody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。
1.6 @RequestParam 映射请求参数
1.6.1 属性
(1) value 值即请求参数的参数名
(2) required 该参数是否必须. 默认为 true
(3) defaultValue 请求参数的默认值
eg:
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam("name") String name,@RequestParam("id") Integer id){
System.out.println(name+"<-->"+id);
return SUCCESS;
}
<a href="springmvc/testRequestParam?name=hanhan&id=250">testRequestParam</a>
1.7 @RequestHeader 映射请求头信息(属性同@RequestParam)(了解)
1.8 @CookieValue 映射一个Cookie值(属性同@RequestParam)(了解)
2. 使用 POJO 对象绑定请求参数值
Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值,支持级联属性。
eg:
两个bean
public class Person {
private String name;
private Integer age;
private Address address;
...
}
public class Address {
private String city;
private Integer id;
...
}
jsp
<form action="springmvc/testPOJO" method="post">
name:<input type="text" name="name"/>
<br>
age:<input type="text" name="age"/>
<br>
city:<input type="text" name="address.city"/>
<br>
id:<input type="text" name="address.id"/>
<br>
<input type="submit" value="提交"/>
</form>
handler
@RequestMapping("/testPOJO")
public String testPOJO(Person person){
System.out.println(person);
return SUCCESS;
}
3. 原生Servlet API 作为参数
API
(1) HttpServletRequest (2) HttpServletResponse (3) HttpSession
(4) java.security.Principal (5) Locale (6) InputStream
(7) OutputStream (8) Reader (9) Writer
eg:
@RequestMapping("/testServlet")
public String testHttpServletAPI(HttpServletRequest req , HttpServletResponse resp){
System.out.println(req+"-----"+resp);
return SUCCESS;
}
4.mvc:annotation-driven
<mvc:annotation-driven />
会自动注册
RequestMappingHandlerMapping 、RequestMappingHandlerAdapter 与 ExceptionHandlerExceptionResolver 三个bean
提供了以下支持:
#
(1) 支持使用 ConversionService 实例对表单参数进行类型转换
(2) 支持使用 @NumberFormat annotation、@DateTimeFormat 注解完成数据类型的格式化
(3) 支持使用 @Valid 注解对 JavaBean 实例进行 JSR 303 验证
(4) 支持使用 @RequestBody 和 @ResponseBody 注解
5. @InitBinder
(1) 由@InitBinder标识的方法,可以对WebDataBinder对象进行初始化。WebDataBinder是DataBinder的子类,用于完成由表单字段到JavaBean属性的绑定
(2) @InitBinder方法不能有返回值,它必须声明为void
(3) @InitBinder方法的参数通常是是WebDataBinder
6.数据格式化(数字类型*@NumberFormat* 与日期类型*@DateTimeFormat*)
(1) @NumberFormat
@NumberFormat(pattern="#,###,###.#")
private Float salary;
(2) @DateTimeFormat
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birth;
还没有评论,来说两句吧...