V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
noble4cc
V2EX  ›  Java

springboot 怎么在 controller 上注解让不同的 url 支持不同的 method?

  •  
  •   noble4cc · 2020-11-13 18:43:11 +08:00 · 2704 次点击
    这是一个创建于 1506 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如 url1 需要只支持 POST url2 只支持 GET 两个 url 映射到一个方法上,有什么好的方式,如果使用 RequestMapping 分别写两个 url 和 method,会产生四种组合感觉不是太好

    老项目做 restful 改造,兼容老的,照顾新的确实很麻烦

    16 条回复    2020-11-16 14:15:03 +08:00
    chendy
        1
    chendy  
       2020-11-13 19:09:40 +08:00
    @ GetMapping("url1")
    @ PostMapping("url2")
    public void method(){
    }

    不知道是不是这个意思
    (为了不艾特到人加了个空格)
    /t/724499 可能不是 java 的锅应该是项目的锅)
    noble4cc
        2
    noble4cc  
    OP
       2020-11-13 20:09:02 +08:00
    好像不行老哥,你可以试下,最终只能用一个 url
    LGA1150
        3
    LGA1150  
       2020-11-13 20:18:56 +08:00 via Android
    写两个 method,method2 直接调用 method1
    tangkaichuan
        4
    tangkaichuan  
       2020-11-13 20:45:18 +08:00 via Android
    把内容用 service 装起来,多个 controller 调同一个 service
    ChanKc
        5
    ChanKc  
       2020-11-13 21:01:56 +08:00
    抽象类写方法实现,然后用两个 controller 分别继承,调用 super
    6IbA2bj5ip3tK49j
        6
    6IbA2bj5ip3tK49j  
       2020-11-13 21:06:26 +08:00
    ????上面都是不看文档瞎答的吗

    @RequestMapping(value = {"hello","world"},method = {RequestMethod.GET,RequestMethod.POST})
    xuanbg
        7
    xuanbg  
       2020-11-13 21:38:15 +08:00   ❤️ 2
    6 楼是对的,但换我做这个事情,才不来写 @RequestMapping(value = {"hello","world"},method = {RequestMethod.GET,RequestMethod.POST})这种奇怪的代码。

    写两个 Controller,一个是旧版本兼容的,一个是船新的。不过这两个 Controller 都调用同一个 service 。这个代码结构新旧分明好维护好扩展。
    wangsongyan
        8
    wangsongyan  
       2020-11-13 21:44:17 +08:00 via iPhone
    @xgfan 代码运行没问题,但没达到楼主想要的效果
    jwenjian
        9
    jwenjian  
       2020-11-13 22:11:36 +08:00 via iPhone
    (只)支持
    hand515
        10
    hand515  
       2020-11-13 22:18:30 +08:00 via Android
    @xuanbg 只支持,你这没用,还是要两个方法
    dengshen
        11
    dengshen  
       2020-11-13 22:38:59 +08:00 via iPhone
    @requestmapping 不写具体的请求方式的话应该是支持所有的 http 请求
    baozijun
        12
    baozijun  
       2020-11-13 23:07:38 +08:00 via iPhone
    一个新 controller 即可,分装不同的 service
    noble4cc
        13
    noble4cc  
    OP
       2020-11-14 10:56:14 +08:00
    @LGA1150 现在就是这么搞的,但是像打补丁有点恶心
    noble4cc
        14
    noble4cc  
    OP
       2020-11-14 10:56:55 +08:00
    @ChanKc 这样成本太高,改动太大了
    noble4cc
        15
    noble4cc  
    OP
       2020-11-14 10:58:45 +08:00
    @xuanbg 这种我现在就是这么干的,但是会组合出四种请求方式,不太规范但是可以跑
    THESDZ
        16
    THESDZ  
       2020-11-16 14:15:03 +08:00
    1.新老应该隔离开不同的入口
    2.老的应该打上 过时 标记

    不要为了兼容而搞奇奇怪怪的代码啊,后面的人怎么接手啊,哦,完成任务就行,那没事了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2494 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:46 · PVG 10:46 · LAX 18:46 · JFK 21:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.