springboot 参数接收 @RequestBody 接收泛型实体类的问题

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现这样的功能可以通过使用枚举、泛型和多态综合运用。具体实现步骤如下: 1. 定义一个枚举类型,其中每个枚举值都对应一个接口类型和实现类类型。 ``` public enum RequestTypeEnum { TYPE_1(Request1.class, Service1.class), TYPE_2(Request2.class, Service2.class); private Class<? extends Request> requestClass; private Class<? extends Service> serviceClass; RequestTypeEnum(Class<? extends Request> requestClass, Class<? extends Service> serviceClass) { this.requestClass = requestClass; this.serviceClass = serviceClass; } public Class<? extends Request> getRequestClass() { return requestClass; } public Class<? extends Service> getServiceClass() { return serviceClass; } } ``` 2. 定义一个泛型方法,根据入参获取对应的枚举值,并根据枚举值获取对应的接口类型和实现类类型。 ``` public <T extends Request, R extends Service> R getService(T request) { RequestTypeEnum requestTypeEnum = getRequestTypeEnum(request); Class<T> requestClass = (Class<T>) requestTypeEnum.getRequestClass(); Class<R> serviceClass = (Class<R>) requestTypeEnum.getServiceClass(); T typedRequest = objectMapper.convertValue(request, requestClass); return applicationContext.getBean(serviceClass).execute(typedRequest); } private <T extends Request> RequestTypeEnum getRequestTypeEnum(T request) { // 根据入参获取对应的枚举值 // ... return requestTypeEnum; } ``` 3. 定义一个统一的入口方法,根据不同入参用不同实体类接收,并调用泛型方法获取对应的实现类并执行。 ``` @RequestMapping("/execute") public Object execute(@RequestParam("type") String type, @RequestBody Object request) { RequestTypeEnum requestTypeEnum = RequestTypeEnum.valueOf(type.toUpperCase()); Class<? extends Request> requestClass = requestTypeEnum.getRequestClass(); Request typedRequest = objectMapper.convertValue(request, requestClass); return getService(typedRequest); } ``` 通过以上步骤,我们就可以实现一个统一的请求入口,根据不同入参用不同实体类接收,根据不同的入参类型获取对应的实现类并执行。同时,通过使用枚举、泛型和多态综合运用,我们可以让代码更加简洁、易读和易维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值