关于@RequestMapping

 关于@RequestMapping

在Spring MVC框架中,@RequestMapping的主要作用是:配置请求路径处理请求的方法的映射关系。

此注解可以添加在控制类上,也可以添加在处理请求的方法上。

通常,会在控制器类和处理请求的方法上都配置此注解,例如:

@RestController
@RequestMapping("/albums")
public class AlbumController {

    @RequestMapping("/add-new")
    public String addNew(AlbumAddNewDTO albumAddNewDTO) {
        // 暂不关心方法内部代码
    }

}

以上配置的路径将是:http://主机名:端口号/类上配置路径/方法上配置的路径,即:http://localhost:8080/albums/add-new

并且,在使用``@RequestMapping配置路径时,路径值两端多余的/是会被自动处理的,在类上的配置值和方法上的配置值中间的/` 也是自动处理的,例如,以下配置是等效的:

类上的配置值方法上的配置值
/albums/add-new
/albumsadd-new
/albums//add-new
/albums/add-new
albums/add-new
albumsadd-new
albums//add-new
albums/add-new

尽管以上8种组合配置是等效的,但仍推荐使用第1种。

@RequestMapping注解的源代码中,有:

@AliasFor("path")
String[] value() default {};

以上源代码表示在此注解中存在名为value的属性,并且,此属性的值类型是String[],例如,你可以配置@RequestMapping(value = {"xxx", "zzz"}),此属性的默认值是{}(空数组)。

在所有注解中,value是默认的属性,所以,如果你需要配置的注解参数是value属性,且只配置这1个属性时,并不需要显式的指定属性名!例如:

@RequestMapping(value = {"xxx", "zzz"})
@RequestMapping({"xxx", "zzz"})

以上2种配置方式是完全等效的!

在所有注解中,如果某个属性的值是数组类型的,但是,你只提供1个值(也就是数组中只有1个元素),则这个值并不需要使用大括号框住!例如:

@RequestMapping(value = {"xxx"})
@RequestMapping(value = "xxx")

以上2种配置方式是完全等效的!

在源代码中,关于value属性的声明上还有@AliasFor("path"),它表示”等效于“的意思,也就是说,value属性与另一个名为path的属性是完全等效的!

@RequestMapping的源代码中,还有:

RequestMethod[] method() default {};

以上属性的作用是配置并限制请求方式,例如,配置为:

@RequestMapping(value = "/add-new", method = RequestMethod.POST)

按照以上配置,以上请求路径只允许使用POST方式提交请求!

强烈建议在正式运行的代码中,明确的配置并限制各请求路径的请求方式!

另外,在Spring MVC框架中,还定义了基于@RequestMapping的相关注解:

  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping

所以,在开发实践中,通常:在控制器类上使用@RequestMapping配置请求路径的前缀部分,在处理请求的方法上使用@GetMapping@PostMapping这类限制了请求方式的注解。

选项A、B、C都是正确的,选项D是错误的。 @RequestMapping注解是Spring MVC框架中用于处理请求映射的注解,可以用于标记控制器方法或控制器类。通过@RequestMapping注解,可以将请求和处理请求的控制器方法管理起来,建立映射关系。 A、@RequestMapping注解的value参数属性通过请求的请求地址匹请求映射。value属性指定了请求的路径,可以是一个字符串或字符串数组。例如: ``` @RequestMapping(value = "/user/list", method = RequestMethod.GET) public String list(Model model) { // do something return "user/list"; } ``` 这个例子中,@RequestMapping注解的value属性指定了请求的路径为"/user/list",即当用户访问"/user/list"时,会调用list()方法。 B、@RequestMapping标识一个方法,设置映射请求请求路径的具体信息。通过@RequestMapping注解,可以将控制器方法与请求路径建立映射关系。例如: ``` @RequestMapping(value = "/user/list", method = RequestMethod.GET) public String list(Model model) { // do something return "user/list"; } ``` 这个例子中,@RequestMapping注解标记了list()方法,指定了请求路径为"/user/list",即当用户访问"/user/list"时,会调用list()方法。 C、@RequestMapping注解的作用就是将请求和处理请求的控制器方法管理起来,建立映射关系。通过@RequestMapping注解,可以将请求和控制器方法之间建立映射关系,从而让请求能够正确地调用相应的控制器方法。例如: ``` @RequestMapping(value = "/user/list", method = RequestMethod.GET) public String list(Model model) { // do something return "user/list"; } ``` 这个例子中,@RequestMapping注解将请求路径"/user/list"与list()方法建立了映射关系,即当用户访问"/user/list"时,会调用list()方法。 D、@RequestMapping标识一个类,设置映射请求的请求路径的初始信息。这个说法是错误的。@RequestMapping注解通常用于标记控制器方法,而不是控制器类。如果要为控制器类设置请求路径的初始信息,可以使用@RequestMapping注解标记控制器类。例如: ``` @Controller @RequestMapping("/user") public class UserController { // do something } ``` 这个例子中,@RequestMapping注解标记了控制器类UserController,指定了请求路径的初始信息为"/user",即当用户访问"/user/xxx"时,会调用UserController中相应的方法。 因此,本题答案为A、B、C。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值