当前位置: 首页 > news >正文

请求类型绑定响应类型

常规请求,响应,客户端的写法

请求

public abstract class BaseRequest {protected String systemCode;protected String timestamp;protected String sign;
}public class GoodsDetailRequest extends BaseRequest {private String goodsId;
}

响应

public abstract class BaseResponse {protected String code;protected String message;
}public class GoodsDetailResponse extends BaseResponse {private String id;private String goodsType;private String goodsPrice;private String goodsStatus;private String goodsImage;
}

Client

public class JdClient {private String postRequest(String param) {return HttpUtil.createPost("https://url.com/api").body(param).execute().body();}public GoodsDetailResponse getGoodsDetail(GoodsDetailRequest request) {String result = postRequest(JSONUtil.toJsonStr(request));return JSONUtil.toJsonStr(result, GoodsDetailRequest.class);}public GoodsListResponse getGoodsList(GoodsListRequest request) {String result = postRequest(JSONUtil.toJsonStr(request));return JSONUtil.toJsonStr(result, GoodsListRequest.class);}// 有多少种请求响应就要写多少种方法
}

思考

这是最常见,最常规的方法,但是这不符合开闭原则。每次引入一种新的API在client中新增一个方法用于获取响应。有没有一种方法可以用于所有类型的请求响应呢?

请求类型绑定响应类型

新的请求写法

// 要求每一个请求类型绑定一个响应类型
public abstract class BaseRequest<T extends BaseResponse> {protected String systemCode;protected String timestamp;protected String sign;public abstract Class<T> getResponseType();
}public class GoodsDetailRequest extends BaseRequest<GoodsDetailResponse> {private String goodsId;@Overridepublic Class<GoodsDetailResponse> getResponseType() {return GoodsDetailResponse.class;}
}

新的Client写法

public class JdClient {private String postRequest(String param) {return HttpUtil.createPost("https://api.com/api").body(param).execute().body();}// 只需要一个方法,就可以用于所有类型的APIpublic <T extends BaseResponse> T execute(BaseRequest<T> request) {String result = postRequest(JSONUtil.toJsonStr(request));return JSONUtil.toBean(result, request.getResponseType());}
}
http://www.njgz.com.cn/news/24.html

相关文章:

  • Untitled-1
  • AI代理性能提升实战:LangChain+LangGraph内存管理与上下文优化完整指南
  • GAIA基准测试介绍
  • 多项式全家桶(wjc)
  • 暑假qbxtNOIP实战梳理营Day1题目
  • 7月26日
  • 韦东山:嵌入式Linux全新系列教程之驱动大全(基于IMX6ULL开发板) 视频+资料(60G) 价值1299元
  • ARC200 小记
  • java第二十六天
  • 咕咕嘎嘎!!!(hard)
  • 主流PLC串口自由协议通信标准化
  • 20250726
  • Abp vNext -动态 C# API 实现原理解析
  • 健身营养——Stan Efferding
  • 20250726-31
  • Linux 如何统计系统上各个用户登录(或者登出)记录出现的次数?
  • ThreadLocal
  • linuxQT配置过程遇到的问题解决办法
  • 倍增法找LCA(最短公共祖先)
  • HTML网页基础(超文本标记语言)
  • shell学习2