controller 接口接收动态对象

1、参数父类

package com.glens.biz.common.support;

import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.glens.biz.sdydxj.Vo.Demo2;
import com.glens.biz.sdydxj.Vo.DemoVo;

/**
 * 参数父类
 * @author yingk
 */
@JsonTypeInfo(
        use = JsonTypeInfo.Id.NAME,
        include = JsonTypeInfo.As.EXISTING_PROPERTY,
        property = "type",
        visible = true)
@JsonSubTypes({
        @JsonSubTypes.Type(value = DemoVo.class, name = SdParams.DEMOVO),
        @JsonSubTypes.Type(value = Demo2.class, name = SdParams.DEMO2),
})
public abstract class SdParams {
    protected static final String DEMOVO = "DemoVo";
    protected static final String DEMO2 = "Demo2";
    protected String type;
}

2、两个子参数对象

package com.glens.biz.sdydxj.Vo;

import com.glens.biz.common.support.SdParams;
import lombok.Data;

/**
 * 测试1
 * @author yingk
 */
@Data
public class DemoVo extends SdParams {
    private String id;
    private String name;
}




package com.glens.biz.sdydxj.Vo;

import com.glens.biz.common.support.SdParams;
import lombok.Data;

/**
 * 测试2
 * @author yingk
 */
@Data
public class Demo2 extends SdParams {
    private String age;
    private String aa;
}

3、总的参数对象

package com.glens.biz.common.support;

import lombok.*;

/**
 * 入参参数
 * @author yingk
 */
@Data
public class SdRequestParams {
    private String beanName;
    private String invokMethod;
    private SdParams params;
}

4、接口中使用

package com.glens.biz.sdydxj.controller;

import com.glens.biz.common.support.SdRequestParams;
import com.glens.biz.common.util.SpringContextUtil;
import org.springframework.util.ReflectionUtils;
import org.springframework.web.bind.annotation.*;

import java.lang.reflect.Method;

@RequestMapping("/main")
@RestController
public class SdydxjController {

    @PostMapping("entrance")
    public Object entrance(@RequestBody SdRequestParams params) {
        System.out.println(params.getParams());
        Method mh = ReflectionUtils.findMethod(SpringContextUtil.getBean(params.getBeanName()).getClass(),
                params.getInvokMethod(), new Class[]{params.getParams().getClass()} );
        Object obj = ReflectionUtils.invokeMethod(mh,  SpringContextUtil.getBean(params.getBeanName()),
                params.getParams());
        return obj;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值