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

Spring Rest Controller @PostMapping parameter best practice ?

  •  
  •   AkideLiu · 2021-01-18 22:22:35 +08:00 · 1723 次点击
    这是一个创建于 1395 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一般 postmapping 接收 json 数据的时候用什么格式比较好呢? DTO object 还是 map ?

    以下两个例子对比一下你觉得哪个好呢?

    1. Map:
    
        @PostMapping("")
        public ResponseEntity<Transaction> addTransaction(HttpServletRequest request,
                                                          @PathVariable("categoryId") Integer categoryId,
                                                          @RequestBody Map<String, Object> transactionMap) {
    
                                                                      
    

    https://github.com/pairlearning/expense-tracker-api/blob/5cb647f06797f2da554e04d89943b1bfb4fe1e00/src/main/java/com/pairlearning/expensetracker/resources/TransactionResource.java#L39-L42

    1. DTO object:
    
    
        @PostMapping(path = "/", consumes = "application/json", produces = "application/json")
        public ApiResultBean createOrUpdatePeople(@Valid @RequestBody PostPeopleDTO postPeopleDTO) throws JsonProcessingException {
        
        
    
    
    12 条回复    2021-01-19 16:19:40 +08:00
    Citrus
        1
    Citrus  
       2021-01-18 22:27:59 +08:00 via iPhone
    用对象。结合 swagger 之类的自动生成接口文档。
    在这里用 Map 后患无穷。
    chendy
        2
    chendy  
       2021-01-18 22:28:54 +08:00
    啊这,标题说 PostMapping,内容问 RequestBody,难道是个不成熟的发帖机器人???
    除非特殊情况需要 Map/JsonNode 之类的接,否则全部对象接
    AkideLiu
        3
    AkideLiu  
    OP
       2021-01-18 22:37:48 +08:00 via iPhone
    @Citrus
    @chendy

    谢谢两位!
    boris93
        4
    boris93  
       2021-01-18 22:45:10 +08:00 via Android   ❤️ 3
    用对象
    谁他妈用 Map 传参看你爹我不抄起铜头皮带给你丫抽成大陀螺
    bxb100
        5
    bxb100  
       2021-01-19 00:44:05 +08:00   ❤️ 1
    @boris93 #4 你的痛我懂
    cslive
        6
    cslive  
       2021-01-19 08:35:58 +08:00
    传参,返回都全部用 map,开发效率高的一批 🐶
    uselessVisitor
        7
    uselessVisitor  
       2021-01-19 08:50:36 +08:00
    @boris93 哈哈哈哈哈哈,暴躁老哥
    90d0n
        8
    90d0n  
       2021-01-19 09:36:07 +08:00
    同意 #4

    接手过一个项目, 全是 map 接参, 我 tm ******
    AkideLiu
        9
    AkideLiu  
    OP
       2021-01-19 11:54:19 +08:00 via iPhone
    @boris93
    机器:我看懂了
    人:我看不懂
    fkdtz
        10
    fkdtz  
       2021-01-19 11:56:01 +08:00
    Map 传参的可能是弱类型语言转过来的,没错说的就是我
    FstarKing
        11
    FstarKing  
       2021-01-19 14:10:48 +08:00
    我们小公司,用什么都没人管,不过看了前面几位老哥的留言,我决定以后用对象了
    boris93
        12
    boris93  
       2021-01-19 16:19:40 +08:00 via Android
    @bxb100 @cslive @beichenhpy @90d0n 看来都是被坑过的啊,Map 一时爽,事后火葬场

    @FstarKing #11 用 Map 的话,别说挨骂了,就是你自己在一个星期之后,都不一定知道自己传了啥过去
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5699 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:20 · PVG 11:20 · LAX 19:20 · JFK 22:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.