在我的spring启动应用程序中,我想基于 @RequestBody
收到的值。有没有同样的方法
接口
public interface Vehicle{
public String drive();
}
接口的实现
@Component
public class Car implements Vehicle {
public String drive(){
return "Driving a car";
}
}
@Component
public class Bike implements Vehicle {
return "Riding a Bike";
}
现在,在基于请求体的控制器中,我想得到 CAR
或者 Bike
.
有没有同样的方法
控制器
@RestController
@RestMapping('type-of-vehicle')
public class VehicleSelectController{
@PostMapping
public String identify_Vehicle_Selected(@RequestBody vehicletype vehicletype_data){
/* ## Code to get the bean of vehicle type sent in the RequestBody */
// example vehicletype_data selected vehicle is car
// we get the bean of the 'CAR' class
// Returns the correct implementation of the type of vehicle selected by user
return vehicle.drive();
}
}
有没有什么注解可以用来实现相同的功能?我正在尝试避免创建一个基于接收到的车辆类型返回正确对象的配置类
我在想这个问题
错误的执行方式
@RestController
@RestMapping('type-of-vehicle')
public class VehicleSelectController{
@PostMapping
public String identify_Vehicle_Selected(@RequestBody vehicletype vehicletype_data){
@Autowired
@Qualifiyer('${vehicletype_data}')
Vehicle vehicle_object
return vehicle_object.drive();
}
}
是否有一种方法可以执行类似于错误实现的操作
4条答案
按热度按时间7gs2gvoe1#
我发现了类似的问题:通过限定符从applicationcontext获取bean
如果它不能解决您的问题,可以尝试以下方法:
将方法添加到
Vehicle
通过请求中的给定数据检查其是否为目标车辆的接口:汽车实施示例:
然后在控制器/服务中注入车辆集合:
在调用
drive
方法仅适用于目标车辆。它从drive
方法,否则在未找到车辆支持时引发异常:在这种方法中,您可以轻松地添加新车辆,而无需修改现有代码。此外,最好使用构造函数注入。
ubby3x7f2#
使用spring引导工具可以实现这一点。然而,当我处理同样的问题时,我不喜欢spring开箱即用提供的解决方案的一些细节。所以,我写了我自己的未来,叫做自我填充工厂,完全按照你的要求。此功能作为我的mgntutils开源库的一部分发布。下面是指向javadoc页面的链接,解释了它的工作原理和使用方法:http://michaelgantman.github.io/mgnt/docs/com/mgnt/lifecycle/management/package-summary.html. 这里还有一篇文章解释了这个想法和实现,以及我认为编写这样一个特性是一个好主意的原因:在spring框架中对“孤立”bean的非侵入性访问。该库本身可以在这里作为maven工件获得,并从github下载源代码和javadoc
pu82cl6c3#
你可以这样做:
bvhaajcl4#
您可以使用工厂模式。为获取车辆bean创建bean工厂。
现在在你的控制器里,