Spring:如何用额外的逻辑修饰一些传入的请求

问题描述 投票:0回答:2

我不知道如何在不被否决10次的情况下提出这个问题,而且很清楚,但是事情已经过去了。我有一个rest控制器类,其中许多端点根据操作对书进行某些操作。

我的问题是一个设计问题,如何最好地从抽象控制器类(handleRequest方法)中获取所有特定于动作的业务逻辑?[[out?我考虑的选项之一是GOF模板模式,可以很好地适合这里。问题是我不想为每种动作类型创建不同的空实现类。也许%80的传入操作类型具有通用流程。我只想为某些操作类型创建一个异常,并向它们添加一些额外的逻辑。另一个选择是“拦截过滤器”模式,但仍然不太适合我的情况。

mainController extends AbstractController{ .... @PostMapping(value = "/getBooks/") public getBooks( @PathVariable ActionType action){ handleGenericBookRequests(action) } ....
}

abstract class AbstractController{ handleGenericBookRequests(action){ //do mostly generic stuff //do generic stuff if (action1){ //do some action1 specific stuff using action 1 related services } if(action2){ //do some action2 specific stuff using action 2 related services } //continue .. } }

java spring design-patterns
2个回答
1
投票
您可以创建一个单独的ActionTypeFilter接口并实现操作类。然后,您可以使用@Qualifier使其合格。例如代码:

@FunctionalInterface interface ActionTypeFilter { void act(); } @Component("action1") class Action1 implements ActionTypeFilter {...} @Component("action2") class Action2 implements ActionTypeFilter {...}

然后将handleGenericBookRequests(action)写入act

@Autowired ApplicationContext ctx; void handleGenericBookRequests(ActionType action) { ActionTypeFilter atf = BeanFactoryAnnotationUtils .qualifiedBeanOfType( ctx.getBeanFactory(), ActionTypeFilter.class, action.getActionQualifier()); atf::act; // invoke the act() }


0
投票
您的问题很重要,您可以使用枚举来节省开支,

您可以使用功能界面定义动作的行为

enum Action{ Action_1(param -> "action for 1"), Action_2(param -> "action for 2"), Action_3(param -> "action for 3"); private final DoSomething doSomething; Action(DoSomething action) { this.doSomething = action; } public DoSomething getDoSomething() { return doSomething; } } private interface DoSomething{ public Object doIt(Object param); } handleGenericBookRequests(action){ Action.valueOf(action).getDoSomething().doIt(your param) }

© www.soinside.com 2019 - 2024. All rights reserved.