2017-05-05 11 views
0

私のWebプロジェクトでは、同じ抽象基本クラスを継承する異なる特定のコマンドオブジェクトを使いたいと思います。私はそれぞれの具体的なコマンドオブジェクトを処理するために、私のコントローラ内のいくつかの方法を使用していますが、それは非常に迷惑なんだ瞬間同じコントローラメソッドを持つコマンドオブジェクトの階層を扱う

public abstract BaseDTO { 
    public String id; 
    public String name; 

    //... 
} 

public ADTO extends BaseDTO { 
    public String address; 

    //... 
} 

public BDTO extends BaseDTO { 
    public String phone; 

    //... 
} 

のように...

:ような何か。私は単一の方法を使用したい:

@PostMapping("/submit") 
public String submit(@Valid @ModelAttribute("myAttribute") BaseDTO dto, BindingResult result) { 
    // ... 
} 

これを達成する方法はありますか?

答えて

0

コンテキストがわからない場合エンドポイントが1つだけの場合は、BaseDTOのよ​​うに1つのDTOを作成し、そこにすべてのパラメータを入れていくつかのオプションを作成します。 これで、必要なすべてのデータを含む1つのエンドポイントが得られ、受信したフィールドに基づいてデータを処理することができます。

public SubmitDTO { 
    public String id; 
    public String name; 
    public Optional<String> address = Optional.empty(); 
    public Optional<String> phone = Optional.empty(); 
    //... 
} 

しかし、私はあなたが一つの共通のエンドポイントのアイデアが良いかどうかを、よく考えてお勧めします。ビジネスドメインの観点から見ると、クライアント側で発生するすべてのものに対して1つのエンドポイントを持つことは非常に奇妙です。将来このようなコードを保持することは非常に難しいかもしれません。

そして、あなたは本当にあなたのシナリオが必要な場合は、このスレッドで答えを見てとることができます: Spring @ReponseBody @RequestBody with abstract class

関連する問題