SpringMVC - (2)@RequestMapping注解的使用

一.@RequestMapping 映射请求注解

1.@RequestMapping 概念

它是SpringMVC中最常用的注解之一,它将http请求映射到MVC或REST的控制器处理方法上。
在这里插入图片描述

2.@RequestMapping 源码参考

二.RequestMapping 可标注的位置

①标记在类上:提供初步的请求映射信息。相对于WEB 应用的根目录。
②标记在方法上:提供进一步的细分映射信息。相对于标记在类上的URL。
在类上标注这个注解后,会将所有请求都映射到这个类中,然后你可以继续在方法上加这个注解以达到映射细分的目的。

三.RequestMapping 的使用

@RequestMapping 来处理多个 URI

如果该注解中只有映射路径,可以不加属性名
如果只有一个值可以不加花括号
同时支持通配符

@RequestMapping(value = { "/hello", "/hello2", "/hello*", "/hello/*" })
带有 @RequestParam 的 @RequestMapping

@RequestParam可以获得请求中的参数,前提是两者的参数名必须相同
如果请求参数名和处理方法中的参数名一致的话,既可以省略@RequestParam中的参数

public void handlerHello(@RequestParam("id") String personId) {
		System.out.println(personId);
	}

当你想不加参数也能调用这个处理方法时,加上required = false

@RequestMapping(value = { "/hello", "/hello2" })
	public void handlerHello(@RequestParam(value = "id", required = false) String personId) {
		System.out.println(personId);
	}

@RequestParam 的 defaultValue 取值就是用来给取值为空的请求参数提供一个默认值的

	@RequestMapping(value = { "/hello", "/hello2" })
	public void handlerHello(@RequestParam(value = "id", required = false,defaultValue = "我是默认值") String personId) {
		System.out.println(personId);
	}

在这段代码中,如果请求参数为空,那么处理方法就会接收 “我是默认值” 这个默认值作为其参数。

用 @RequestMapping 处理 HTTP 的各种方法

Spring MVC 的 @RequestMapping 注解能够处理 HTTP 请求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。
所有的请求默认都会是 HTTP GET 类型的。
当然都可以改

	@RequestMapping(value = { "/hello", "/hello2" }, method = RequestMethod.POST)
	public void handlerHello(@RequestParam(value = "id", required = false, defaultValue = "我是默认值") String personId) {
		System.out.println(personId);
	}

这样它就只能接受POST请求了

用 @RequestMapping 来处理生产和消费对象

可以使用 @RequestMapping 注解的 produces 和 consumes 这两个元素来缩小请求映射类型的范围

	@RequestMapping(value = "/pro", produces = { "application/JSON" })
	@ResponseBody
	void getProduces() {
	}

	@RequestMapping(value = "/con", consumes = { "application/JSON", "application/XML" })
	void getConsumes() {
	}

在上面这段代码中,getConsumes()方法可以接收方法体中的XML和JSON(get方法没有方法体),getProduces只能发出JSON格式的响应

使用 @RequestMapping 来处理消息头

@RequestMapping 注解提供了一个 header 元素来根据请求中的消息头内容缩小请求映射的范围。

	@RequestMapping(value = "/head", headers = { "content-type=text/plain" })
	String post() {
		return "Mapping applied along with headers";
	}

意思是只有路径和content-type被指定为text/plain的请求才能正确映射到这个方法中

使用 @RequestMapping 来处理请求参数

@RequestMapping 直接的 params 元素可以进一步帮助我们缩小请求映射的定位范围。使用 params 元素,你可以让多个处理方法处理到同一个URL 的请求, 而这些请求的参数是不一样的。

	@RequestMapping(value = "/fetch", params = { "personId=10" })
	void getParams(@RequestParam("personId") String id) {
	}

上面代码中,只有请求所带参数person=10时,才能映射到这个处理方法
如果说先前的@RequestMapping是用来做参数传递的话,那么这个params就可以用来判断参数是否符合要求

使用 @RequestMapping 处理动态 URI

@RequestMapping 注解可以同 @PathVaraible 注解一起使用,用来处理动态的 URI,URI 的值可以作为控制器中处理方法的参数。你也可以使用正则表达式来只处理可以匹配到正则表达式的动态 URI。

    @RequestMapping(value = "/fetch/{id}", method = RequestMethod.GET)
    String getDynamicUriValue(@PathVariable String id) {
        System.out.println("ID is " + id);
        return "Dynamic URI parameter fetched";
    }
    @RequestMapping(value = "/fetch/{id:[a-z]+}/{name}", method = RequestMethod.GET)
    String getDynamicUriValueRegex(@PathVariable("name") String name) {
        System.out.println("Name is " + name);
        return "Dynamic URI parameter fetched using regex";
    }

上面这个代码注意这个@PathVariable是获取请求路径中的花括号包起来的那一坨(可以理解为一个占位符),你如果将@RequestMapping设置成"/",即接受全部路径,然后用@RequestParam来接受参数,现在我的uri为/fetch/10,第一种方式通过,而第二种报错,原因不谈,注意这两者的区别

@RequestMapping 默认的处理方法

在控制器类中,你可以有一个默认的处理方法,它可以在有一个向默认 URI 发起的请求时被执行。

    @RequestMapping()
    String
    default () {
        return "This is a default method for the class";
    }
@RequestMapping 快捷方式

Spring 4.3 引入了方法级注解的变体,也被叫做 @RequestMapping 的组合注解。组合注解可以更好的表达被注解方法的语义。它们所扮演的角色就是针对 @RequestMapping 的封装,而且成了定义端点的标准方法。

例如,@GetMapping 是一个组合注解,它所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。
方法级别的注解变体有如下几个:

  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping
    相信以后的注解还会衍变的更简单,因为人总是喜欢偷懒的。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值