前言一、使用步骤
1.定义出参结果类2.定义接口类3.规则统一处理逻辑类4.接口响应结果处理器类5.业务处理类(随业务扩展)
5.15.2 6.控制层 二.测试结果
1.参数为空2.业务处理1类3.业务处理2类4.输入不存在的接口 三.代码结构总结
前言
优点:可基于批量if else场景下优化代码;扩展性高
缺点:不兼容swagger在线接口文档
一、使用步骤 1.定义出参结果类
@Data
public class SendResult {
public SendResult(Boolean result, String message) {
this.result = result;
this.message = message;
}
private Boolean result;
private String message;
}
2.定义接口类
public interface OpenApi {
boolean support(String uri);
SendResult handle(String uri, Object[] result);
}
3.规则统一处理逻辑类
public abstract class AbstractOpenApi implements OpenApi {
@Override
public SendResult handle(String uri, Object[] result) {
return getResult(uri, result);
}
public abstract SendResult getResult(String uri, Object[] result);
}
4.接口响应结果处理器类
@Slf4j
@Component(value = "OpenApiManger")
public class OpenApiManger implements OpenApi {
@Resource
private List abstractWs;
@Override
public boolean support(String uri) {
//默认不支持
return false;
}
@Override
public SendResult handle(String uri, Object[] result) {
getParam(uri, result);
//校验uri是否合法
for (AbstractOpenApi ws : abstractWs) {
if (ws.support(uri)) {
long s = System.currentTimeMillis();
SendResult body = ws.handle(uri, result);
long e = System.currentTimeMillis();
log.info("完成请求--->uri[{}],请求内容[{}],请求耗时:{}ms", uri, result, (e - s));
return body;
}
}
return new SendResult(false, "不支持该接口");
}
public void getParam(String uri, Object[] result) {
if (uri == null || result == null) {
throw new ParamException("参数不能为空");
}
}
}
5.业务处理类(随业务扩展)
5.1
@Service
@Slf4j
public class ResultApi1 extends AbstractOpenApi {
private final static String URI = "api1";
@Override
public SendResult getResult(String uri, Object[] result) {
log.info("业务处理1类");
JSonObject jsonObject = (JSONObject) JSONObject.parse(result[0].toString());
return new SendResult(jsonObject.getBoolean("Statue"),
jsonObject.getString("Messages"));
}
@Override
public boolean support(String uri) {
return URI.equals(uri);
}
}
5.2
@Service
@Slf4j
public class ResultApi2 extends AbstractOpenApi {
private final static String URI = "api2";
@Override
public SendResult getResult(String uri, Object[] result) {
log.info("业务处理2类");
JSonObject jsonObject = (JSONObject) JSONObject.parse(result[0].toString());
return new SendResult(jsonObject.getBoolean("Statue"),
jsonObject.getString("Messages"));
}
@Override
public boolean support(String uri) {
return URI.equals(uri);
}
}
6.控制层
@RestController
public class TestController {
@Resource
private OpenApiManger openApiManger;
@GetMapping("test")
public SendResult test(String uri) {
String message = "{"Statue":false,"Messages":"解析失败!"}";
Object[] result = new String[]{message};
return openApiManger.handle(uri, result);
}
}
二.测试结果
1.参数为空
2.业务处理1类
总结
完结



