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

[Spring Boot] 表单如何绑定不同 POJO 对象

  •  
  •   fuxinya · 2019-02-19 10:06:47 +08:00 · 1882 次点击
    这是一个创建于 2102 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有三个 Goods 表单类

    • GoodsForm1
    • GoodsForm2
    • GoodsForm3

    均继承自GoodsFormGoodsForm里面存放的公用字段,各自则存放的独有字段。通过一个接口传入表单,能否自动识别绑定参数至Goods1Goods2Goods3

    public Object addGoods(@Validated GoodsForm goodsForm, BindingResult result) {
        if(goodsForm instanceof GoodsForm1) {
            // DO STH...
        }
    }
    

    还是说只能造三个接口。但是以后如果继续扩展怎么办,继续往下加感觉不优雅

    6 条回复    2019-02-19 14:34:07 +08:00
    leon0903
        1
    leon0903  
       2019-02-19 10:46:23 +08:00
    没试过 但是感觉使用父类去绑定不同的子类是行不通的。
    fuxinya
        2
    fuxinya  
    OP
       2019-02-19 11:01:01 +08:00
    @leon0903 暂时的方案:不让 Spring 自动绑定了,手动用 JSON 工具去解析 body,根据 type 解析成不同的 GoodsForm。暂时先这样吧
    smeraldo
        3
    smeraldo  
       2019-02-19 11:20:42 +08:00   ❤️ 3
    fuxinya
        4
    fuxinya  
    OP
       2019-02-19 14:12:22 +08:00
    fuxinya
        5
    fuxinya  
    OP
       2019-02-19 14:22:24 +08:00
    感谢 @smeraldo 的方案,已解决。不过项目里用的是阿里的 fastjson,可以使用 @JSONType 注解,支持 seeAlso 配置
    具体请参照文档 [JSONType_seeAlso_cn]( https://github.com/alibaba/fastjson/wiki/JSONType_seeAlso_cn)
    leon0903
        6
    leon0903  
       2019-02-19 14:34:07 +08:00
    我也长见识了 谢谢各位
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1768 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:40 · PVG 00:40 · LAX 08:40 · JFK 11:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.