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;
}
}