0

我有一个调用后方法,方法参数用@ReuqestBody 注释,用于类 A。现在,在我的类 A 中,有一个 B 类型的变量,并且该类有几个子类。在请求中,我传递了 B 子类型的枚举,并希望根据子类型初始化我的 requestBody。

class A {
    B b;
    ...

    A(Subtype S, B data) {
         // I need to initialize A based on subtype (my B's class would be dynamic here)
    }
}

class B {
    String s1;
}

class C extends B {
    int x;
}

class D extends B {
    double d;
    String s2;
}


class XYZController {

    public Resp doThis (@RequestBody A, @PathVariable SubType) {

    }
}

enum SubType {
    C ("C")
    D ("D")
}

所以整体结构是这样的。现在,根据我作为子类型传递的内容,我想创建那种对象。我对 Spring 在进行此类映射时如何调用构造函数感到有些困惑。任何线索都会有帮助。

非常感谢。

4

1 回答 1

0

为什么不公开所有可用的 API?拥有特定 API 而不是通用 API 是有意义的。

这是 KISS 模式:保持简单愚蠢。它可以让您增强 API 的可用性。

像这样的东西:

@PostMapping(value="/mypath/v1/something-usefull-for-api-a")
public Resp doThis (@RequestBody A) {

}
@PostMapping(value="/mypath/v1/something-usefull-for-api-b")
public Resp doThisForB (@RequestBody B) {

}
@PostMapping(value="/mypath/v1/something-usefull-for-api-c")
public Resp doThisForC (@RequestBody C) {

}
...and so on...
于 2021-09-23T12:19:08.390 回答