2017-05-05 75 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

不知道上下文 如果你真的只想要一个端点,我的解决方案是创建一个像你的BaseDTO一样的DTO,把所有参数放在那里,并使其中的一些可选。 因此,您将拥有一个包含所需数据的Endpoint,然后您将能够根据您收到的字段处理数据。

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

但我建议你三思而后行,一个共同的终点的想法是否良好。因为从业务领域的角度来看,很奇怪的是,您将拥有一个端点来处理客户端发生的所有事情。未来可能很难维护这样的代码。

如果你真的真的需要你的情况,那么你可以看看在这个线程的答案: Spring @ReponseBody @RequestBody with abstract class

相关问题