Spring MVC - 02 RequestMapping映射请求

使用 @RequestMapping 映射请求

1.SpringMVC 使用@RequestMapping 注解为 控制器 指定可以处理哪些URL 请求

2. 在控制器的 类定义 及 方法定义处 都可以标注@RequestMapping

类定义处: 提供初步的请求映射信息。 相对于 WEB 应用的根目录

方法处: 提供进一步的细分映射信息。相对于类定义处的URL。若类定义处未标注 @RequestMapping,则方法

处标记的URL 相对于WEB 应用的根目录

3.DispatcherServlet截取请求后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理方法。

@Controller
public class SpringMVCTest {
    public static final String SUCCESS = "success";

    @RequestMapping("/testRequestMapping")
    public String testRequestMapping(){
        System.out.println("testRequestMapping");
        return SUCCESS;
    }
}

<a href="testRequestMapping">Test RequestMapping</a>

http://localhost:8080/testRequestMapping

@Controller
@RequestMapping("springmvc")
public class SpringMVCTest {
    public static final String SUCCESS = "success";

    @RequestMapping("/testRequestMapping")
    public String testRequestMapping(){
        System.out.println("testRequestMapping");
        return SUCCESS;
    }
}

<a href="springmvc/testRequestMapping">Test RequestMapping</a>

http://localhost:8080/springmvc/testRequestMapping

映射请求参数、请求方法或请求头

@RequestMapping 除了可以使用 请求URL 映射请求 外,还可以使用 请求方法、请求参数 及 请求头映射请求

@ RequestMapping 的 value、method、params及 headers 分别表示 请求 URL、 请求方法、请求参数及请求头的映射条件,它们之间是的关系。联合使用多个条件可让请求映射更加精确化。

params 和 headers 支持简单的表达式:

- param1:表示请求必须包含名为 param1的请求参数

- !param1:表示请求不能包含名为 param1的请求参数

- param1!=value1:表示请求包含名为 param1的请求参数,但其值不能为 value1

- {“param1=value1”,”param2”}:表示请求必须包含名为 param1 和 param2的两个请求参数,且param1参数的值必须为 value1

    /**
     * 使用 method 属性来指定请求方式
     * @return
     */
    @RequestMapping(value = "/testMethod", method = RequestMethod.POST)
    public String testMethod(){
        System.out.println("testMethod");
        return SUCCESS;
    }
<a href="springmvc/testMethod">Test Method</a><br/>

<form action="springmvc/testMethod" method="POST">  <input type="submit" value="submit"/></form>
    @RequestMapping(value = "/testParamsAndHeaders", params = {"username", "age!=10"})
    public String testParamsAndHeaders(){
        System.out.println("testParamsAndHeaders");
        return SUCCESS;
    }
<a href="springmvc/testParamsAndHeaders?username=sun&age=10">Test ParamsAndHeaders</a><br/>

报错:20-Oct-2018 16:39:22.796 警告 [catalina-exec-1] org.springframework.web.servlet.PageNotFound.handleNoSuchRequestHandlingMethod No matching handler method found for servlet request:    path ‘/springmvc/testParamsAndHeaders‘, method ‘GET‘, parameters map[‘username‘ -> array<String>[‘sun‘], ‘age‘ -> array<String>[‘10‘]]

修改age=11 后访问正常

设置 headers

HTTP 协议报文格式

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

IE 无法访问, Chrome 可以访问

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/mmm/abc">Test AntPath</a><br/><br/>

@ PathVariable 映射 URL 绑定的占位符

带占位符的 URL 是 Spring 3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑式的意义。

通过 @ PathVariable 可以将URL 中占位符 参数绑定到 控制器 处理方法的入参中:

URL 中的 {xxx} 占位符可以通过 @ PathVariable(“xxx”) 绑定到操作方法的入参中。

    @RequestMapping("/testPathVariable/{id}")
    public String testPathVariable(@PathVariable("id") Integer id){
        System.out.println("testPathVariable: " + id);
        return SUCCESS;
    }
<a href="/springmvc/testPathVariable/1">Test PathVariable</a><br/><br/>

Console:   testPathVariable: 1




原文地址:https://www.cnblogs.com/kingdomer/p/9822208.html

时间: 2025-01-09 15:43:04

Spring MVC - 02 RequestMapping映射请求的相关文章

使用Spring MVC 的 @RequestBody 映射json请求参数时报异常问题

使用Spring MVC 的 @RequestBody 映射json请求参数时报"The request sent by the client was syntactically incorrect."异常解决方案 最近工作中开发RESTful接口需要处理客户端上传的json,图方便想起Spring的Controller中有@RequestBody可以优雅地完成json报文与Java类的映射,但是使用时碰到了 "The request sent by the client w

用@RequestMapping映射请求

DispatcherServlet接受一个web请求之后,将请求发送给@Controller注解声明的不同控制器类. 这个调度过程依赖控制器类及其处理程序方法中声明的各种@RequestMapping注解. Spring MVC中,web请求通过控制器类中声明的一个或者多个@RequestMapping注解映射到处理程序. 处理程序映射根据与上下文路径(Web应用上下文路径)和servlet路径(映射到DispatcherServlet的路径)的相对路径匹配URL. 使用@RequestMapp

@RequestMapping映射请求,@PathVariable,@RequestParam,@RequestHeader的使用

1.@RequestMapping Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求,在控制器的类定义及方法定义处都可标注. @RequestMapping 类定义处:提供初步的请求映射信息.相当于当前 WEB 应用的根目录 方法处:提供进一步的细分映射信息.相对于类定义处的 URL. 若类定义处未标注 @RequestMapping,则方法处标记的 URL 相当于当前 WEB 应用的根目录 若类定义处标注 @RequestMapping,则

SpringMVC之使用requestMapping映射请求、映射参数、映射头

1. 映射请求 作用:使用requestMapping可以指定处理器可以处理那些请求 地方:类和方法前面都可以 @requestMapping 类定义处: 提供初步的请求映射信息,相对于web应用的根目录. 方法定义处: 提供进一步的细分映射信息,相对于类定义处的URL.若类定义处未标注 @requestMapping,则方法处的URL相对于web应用的根目录 2. 映射参数和映射头 @RequestMapping(value="testParamsAndHandler",params

SpringMVC之使用 @RequestMapping 映射请求

@RequestMapping注解 SpringMVC使用该注解让控制器知道可以处理哪些请求路径的,除了可以修饰方法,还可以修饰在类上. – 类定义处:提供初步的请求映射信息.相对于 WEB 应用的根目录– 方法处:提供进一步的细分映射信息.相对于类定义处的 URL.若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于WEB 应用的根目录 . DispatcherServlet作为SpringMVC的前置控制器,拦截客户端请求后,通过该注解的映射信息确定请求的处理方法

jQuery中Ajax+Spring MVC实现跨域请求

项目开发中,某个可独立.也可集成的子业务模块须要向外开放相关API接口,先说下项目本身使用了jersery来实现RESTful webservice以名词形式公布API.有意思的是在实际的操作中同事却通过Ajax跨域请求的方式去调用该API,先不说成功与否,这样的方式本就是"滑稽"的.和他一起探讨了此种做法的不合理性,之后选择jersey client的方式进行远程调用.只是他在跨域请求中遇到了问题,自己闲暇时间予以解决,这才是此篇文章的由来. jQuery对跨域请求有两种解决方式各自

Ajax+Spring MVC实现跨域请求(JSONP)JSONP 跨域

JSONP原理及实现 接下来,来实际模拟一个跨域请求的解决方案.后端为Spring MVC架构的,前端则通过Ajax进行跨域访问. 1.首先客户端需要注册一个callback(服务端通过该callback(jsonp)可以得到js函数名(jsonpCallback)),然后以JavaScript语 法的方式,生成一个function 2.接下来,将JSON数据直接以入参的方式,放置到function中,这样就生成了一段js语法文档,返回给客户端. 3.最后客户端浏览器动态的解析script标签,

Ajax+Spring MVC实现跨域请求(JSONP)

JSONP解释 在解释JSONP之前,我们需要了解下"同源策略"这个概念,这对理解跨域有帮助.基于安全的原因,浏览器是存在同源策略机制的,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载额文档的属性.有点绕,说的简单点就是浏览器限制脚本只能和同协议.同域名.同端口的脚本进行交互. JSONP就是为了解决这一问题的,JSONP是英文JSON with Padding的缩写,是一个非官方的协议.他允许服务端生成script tags返回值客户端,通过javascript call

Ajax+Spring MVC实现跨域请求(JSONP)(转)

背景: AJAX向后台(springmvc)发送请求,报错:已阻止交叉源请求:同源策略不允许读取 http://127.0.0.1:8080/DevInfoWeb/getJsonp 上的远程资源.可 以将资源移动到相同的域名上或者启用 CORS 来解决这个问题. 百度一下,发现是遇到了跨域请求请求问题.搜集资料如下 JSONP解释 在解释JSONP之前,我们需要了解下"同源策略"这个概念,这对理解跨域有帮助.基于安全的原因,浏览器是存在同源策略机制的,同源策略阻止从一个源加载的文档或脚