V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
noble4cc
V2EX  ›  Java

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

  •  
  •   noble4cc · Nov 13, 2020 · 3155 views
    This topic created in 1994 days ago, the information mentioned may be changed or developed.

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

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

    16 replies    2020-11-16 14:15:03 +08:00
    chendy
        1
    chendy  
       Nov 13, 2020
    @ GetMapping("url1")
    @ PostMapping("url2")
    public void method(){
    }

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

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

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

    不要为了兼容而搞奇奇怪怪的代码啊,后面的人怎么接手啊,哦,完成任务就行,那没事了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2397 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 162ms · UTC 16:00 · PVG 00:00 · LAX 09:00 · JFK 12:00
    ♥ Do have faith in what you're doing.