3. @RequestMapping注解1

使用@RequestMapping映射请求:

概述:

  1. @RequestMapping除了可以使用请求URL映射请求外,还可以使用请求方法、请求参数及请求头映射请求
  2. @RequestMapping的value、method、params及heads分别表示请求URL、请求方法、请求参数及请求头的映射条件,他们之间分别是与的关系,联合使用多个条件可让请求映射更加精确化
  3. params和heads支持简单的表达式:
    • param1:表示请求必须包含名为param1的请求参数
    • !param1:表示请求不能包含名为param1的请求参数
    • param1!=value1:表示请求参数必须包含名为param2的请求参数,但其值不能为value1
      - {“param1=value”,“param2”}:请求必须包含名为param1和param2的两个请求参数,并且param1的值为value1
@RequestMapping修饰类:
  1. SpringMVC使用@RequestMapping注解为控制器指定可以处理哪些URL请求
  2. 在控制器的类定义及方法定义处都可以标注
    @RequestMapping
    –类定义处:提供初步的请求映射信息。相对于WEB应用的根目录
    –方法处:提供进一步的细分映射信息。相对于类定义处的URL。若类定义处未标注@RequestMapping,则方法处标记的URL相对于WEB应用的根目录
    –@RequestMapping(value=“”)value值为处理映射URL的名称 即jsp界面中 href的值
  3. DispatcherServlet截获请求后,就通过控制器上@RequestMapping提供的映射信息确定请求所对应的处理方法。
@RequestMapping请求方式:
  1. @RequestMapping(value="/testMethod",method=RequestMethod.POST) 指定请求方式为post
  2. JSP界面创建post请求:
	<form action="springmvc/testMethod" method="post">
        <input type="submit" value="testMethod">
    </form>
@RequestMapping请求参数:

了解:可以使用params和headers来更加精确的映射请求,params和headers支持简单的表达式

  @RequestMapping(value = "testParamsAndHeader", params = { "username", "age!=10" }, headers = {
			"Accept-Language=zh-CN,zh;q=0.9" })
	public String testParamsAndHeader() {
		System.out.println("testParamsAndHeader");
		return SUCCESS;
	}

@RequestMapping_Ant_Pat_Hid

1.@RequestMapping_Ant
Ant 风格资源地址支持3种匹配符:
  • ?:匹配文件名中的一个字符
  • *:匹配文件名中的任意字符
  • **:**匹配多层路径
@RequestMapping还支持Ant风格的URL:

-/user/*/createUser:匹配/user/aaa/createUser、/user/bbb/createUser等URL
-/user/**/createUser:匹配/user/createUser、/user/aaa/bbb/createUser等URL
-/user/createUser??:匹配/user/createUseraa、/user/createUserbb等URL
示例演示:

@RequestMapping("/testAntPath/*/abc")
	public String  testAntPath() {
		System.out.println("testAntPath");
		return SUCCESS;
	}
<a href="springmvc/testAntPath/(任意字符)/abc">testAntPath</a>

@RequestMapping_Pat(可以将占位符的值映射到方法变量中)

@PathVariable映射URL绑定的占位符
· 带占位符的URL是Spring3.0新增的功能,该功能在SpringMVC向REST目标挺进发展过程中具有里程碑的意义。
· 通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中:URL中的{xxx}占位符可以通过@PathVariable(“xxx”)绑定到到操作方法的入参中。
@PathVariable可以映射URL中的占位符到目标方法的参数中

@RequestMapping("/delete/{id}")
public String delete(@PathVariable("id") Integer id){
    UserDao.delete(id);
    return "redirect:/user/list.action";
}

@RequestMapping_Hid

HiddenHttpMethodFilter(方法):浏览器form表单只支持GET与POST请求,而DELETE、PUT等method并不支持,spring3.0添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求
作用:简而言之,就是使不支持PUT/DELETE方式的表单通过对HiddenHttpMethodFilter的配置实现支持该两者方式。
具体步骤:

  1. 在web.xml文件中配置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>
  1. 需要发送POST请求
  2. 需要在发送POST请求时携带一个name="_method"的隐藏域,值(value)为DELETE/PUT,JSP界面具体配置如下:
<form action="springmvc/testRest/1" method="post">
		<input type="hidden" name="_method" value="DELETE">
		<input type="submit" value="Test Rest DELETE">
	</form>

4.代码部分:

@RequestMapping(value="/testRest/{id}",method=RequestMethod.DELETE)
	public String testRestDelete(@PathVariable("id") Integer id) {
		System.out.println("testRest Delete:"+id);
		return SUCCESS;
	}

如果存在问题:配置成功后依旧提示不支持Delete、put操作
在指定的报错方法前添加注解@ResponseBody
@ResponseBody解析:
添加此注解后,直接将数据写入到输入流,不会再走视图处理器。
将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。添加此注解后,直接将数据写入到输入流,不会再走视图处理器。他的效果等同于通过response对象输出指定格式的数据。
问题:转发的网页格式消失,无法显示

发布了4 篇原创文章 · 获赞 3 · 访问量 72

猜你喜欢

转载自blog.csdn.net/weixin_42502684/article/details/105026208
3.