具有控制器,方法,标头,参数,@ RequestParam和@PathVariable的Spring MVC @RequestMapping注释示例
@RequestMapping是使用最广泛的Spring MVC注释之一。
org.springframework.web.bind.annotation.RequestMapping注释用于将Web请求映射到特定的处理程序类和/或者处理程序方法。
@RequestMapping可以应用于控制器类和方法。
今天,我们将通过示例和其他注释,例如@PathVariable和@RequestParam,研究此注释的各种用法。
Spring@RequestMapping
@RequestMapping with Class:我们可以将其与类定义一起使用以创建基本URI。
例如:
现在/home是将用于此控制器的URI。
这个概念与Web应用程序的servlet上下文非常相似。@RequestMapping with Method:我们可以将它与method一起使用,以提供将使用处理程序方法的URI模式。
例如:
上面的注释也可以写成@RequestMapping("/method0")
。
附带说明一下,我正在使用@ResponseBody发送此Web请求的String响应,这样做是为了保持示例简单。
像往常一样,我将在Spring MVC应用程序中使用这些方法,并通过简单的程序或者脚本对其进行测试。具有多个URI的@RequestMapping:我们可以使用一种方法来处理多个URI,例如:
如果您查看RequestMapping批注的源代码,您会发现它的所有变量都是数组。
我们可以为处理程序方法的URI映射创建String数组。使用HTTP方法的@RequestMapping:有时我们希望基于所使用的HTTP方法执行不同的操作,即使请求URI保持不变。
我们可以使用@RequestMapping方法变量来缩小将为此方法调用的HTTP方法。
例如:@RequestMapping与标头:我们可以指定应存在的标头以调用处理程序方法。
例如:带有Produces和Consums的@RequestMapping:我们可以使用标头Content-Type和Accept来查找请求内容以及它想要作为响应的mime消息。
为了清楚起见,@ RequestMapping提供产生和使用变量,我们可以其中指定将为其调用方法的请求内容类型以及响应内容类型。
例如:
上面的方法只能使用Content-Type为text/html的消息,并且能够产生application/json和application/xml类型的消息。
Spring@PathVariable
- @RequestMapping和@PathVariable:RequestMapping批注可用于处理动态URI,其中一个或者多个URI值用作参数。
我们甚至可以为URI动态参数指定正则表达式,以仅接受特定类型的输入。
它与@PathVariable注释一起使用,通过它我们可以将URI变量映射到方法参数之一。
例如:
Spring@RequestParam
@RequestMapping和@RequestParam作为URL参数:有时我们在请求URL中获取参数,大部分是在GET请求中。
我们可以将@RequestMapping与@RequestParam批注一起使用,以检索URL参数并将其映射到方法参数。
例如:
为了使此方法有效,参数名称应为" id",并且其类型应为int。@RequestMapping默认方法:如果某个方法的值为空,则它将用作控制器类的默认方法。
例如:
如上所示,我们已经将/home映射到HomeController,该方法将用于默认的URI请求。@RequestMapping后备方法:我们可以为控制器类创建一个后备方法,以确保即使没有匹配的处理程序方法,我们也可以捕获所有客户端请求。
如果没有用于请求的处理程序方法,则在向用户发送自定义404响应页面时很有用。
Spring RestMapping测试程序
我们可以使用Spring RestTemplate来测试上述不同的方法,但是今天我将使用cURL命令来测试这些方法,因为它们很简单并且周围没有太多数据。
我创建了一个简单的shell脚本springTest.sh,以调用上述所有方法并输出其输出。
如下图所示。
@Controller @RequestMapping("/home") public class HomeController { }
请注意,我已经在Tomcat-7上部署了Web应用程序,并且该Web应用程序在端口9090上运行。
SpringRequestMappingExample是应用程序的Servlet上下文。
现在,当我通过命令行执行此脚本时,将得到以下输出。
@RequestMapping(value="/method0") @ResponseBody public String method0(){ return "method0"; }
尽管您可能想检查默认方法和后备方法,但大多数都是自我理解的。