Spring MVC的@RequestMapping多URL映射实现

86 篇文章 2 订阅
44 篇文章 2 订阅
本文介绍了在项目架构调整时,如何优雅地处理Spring MVC中大量@RequestBody映射路径的修改。通过研究发现,@RequestMapping支持多URL,从而避免了创建新Controller的大量工作。通过在注解中使用数组定义多个URL,实现了在线和开发版本的兼容。示例代码展示了三种实现方式,最终达到了批量修改的目的。
摘要由CSDN通过智能技术生成

修改背景

项目在执行一半的时候,因为架构调整,需要对整个目录都进行调整,按照拆分,原有的mvc的映射路径需要批量修改。

考虑到项目已经是上线状态,需要同时兼容在线和开发版本。

解决方法

因为使用的是springMVC。所以不可避免的会用到RequestMapping注解字段。如果要修改的话有两种方案:

1、所有的新的都走新的URL,所有都重新创建一个Controller,然后实现的话跳转到原有的里面去。这种方案的话修改量太大,而且存在一些不可控的风险。

2、研究RequestMapping。看是否可以支持多URL,如果不支持的话,需要自己对这部分的代码进行定制。经研究,RequestMapping是支持多URL的。所以推荐使用方法二。

先简单看下RequestMapping的源码:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
    String name() default "";

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

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

    RequestMethod[] method() default {};

    String[] params() default {};

    String[] headers() default {};

    String[] consumes() default {};

    String[] produces() default {};
}

我们看到代码里面,有个value和path的别名注解。(别名注解干啥用的,这里不作过多解释)

所以我们可以直接使用数组的方式来定义多个URL。以达到我们前面的兼容的目的。

// 实现方式1
@RequestMapping({"api/admin/wechat/program","api/sys/admin/wechat/program"})

// 实现方式2
@RequestMapping(value={"api/admin/wechat/program","api/sys/admin/wechat/program"})

// 实现方式3
@RequestMapping(path={"api/admin/wechat/program","api/sys/admin/wechat/program"})

以上是三种实现方式,效果是一样的,至于为什么是一样的, @AliasFor这个注解的功劳。至于@AliasFor,这个自行百度吧,就当是课后作业。

好了,问题至此完结!希望没有误导大伙

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值