# 自定义Http送信器 当你不想使用框架内默认提供的httpClient服务而是想要自己实现一个的话,核心中提供了一个简易的自定义送信器接口:`HttpClientAble`。 `HttpClientAble`接口默认存在一个实现,也就是刚刚提到的框架内默认提供的`DefaultHttpClientTemplate`。当不存在用户自定义的送信器的时候,便会默认使用此送信器。 ## **自定义并注册** 当你想要自定义一个送信器并让框架内部默认使用此送信器的话,你需要做两件事: - **1. 实现`HttpClientAble`接口** - **2.1. 在此类上标注`@HttpTemplate`注解来注册** - **2.2. 使用`HttpClientHelper`类的静态方法`registerClient(...)`来注册** <br> ### **1. 实现接口** 接口定义的抽象方法为: ```java /** * 使用get的方式进行网络请求 * @param url 送信网络路径 * @param params 参数列表,默认为空map,可以为null * @param cookies 所携带的cookie列表,默认为空map,可以为null * @param header 头信息,默认为空map,可以为null * @return 网页的返回值字符串 */ String get(String url, Map<String, String> params, Map<String, String> cookies, Map<String, String> header); /** * 使用post的方式进行网络请求 * 一般header中会提供一些json或者from的参数 * @param url 送信网络路径 * @param params 参数列表,默认为空map,可以为null * @param cookies 所携带的cookie列表,默认为空map,可以为null * @param header 头信息,默认为空map,可以为null * @return 网页的返回值字符串 */ String post(String url, String params, Map<String, String> cookies, Map<String, String> header); ``` 即一个GET请求一个POST请求,并提供了若干默认方法的重载。 此类应当是可以支持依赖注入的。 ### **2.1 标注注解来注册** 你可以在实现后,从类上标注一个`@HttpTemplate`注解来将其注册进`HttpClientHelper`中。此注解有两个参数: ```java /** * 注册到HttpClientHelper的时候使用的注册名称 */ String value(); /** * 是否将其作为默认使用的http模板,默认为false */ boolean beDefault() default false; ``` 其中,"默认的模板"指的就是框架内所默认使用的模板。当然,尽管默认值为`false`,但是假如在那之前没有其他任何http送信器被注册的话,第一个注册的http送信器依旧会被作为默认的。 ### **2.2 HttpClientHelper方法注册** 使用注解来注册本质上也是使用的`HttpClientHelper`类的方法`registerClient(...)`来注册的。此方法有两个重载: ```java /** * 注册一个http模板 * @param name http模板名称 * @param clientAble 模板实例 */ public static void registerClient(String name, HttpClientAble clientAble) /** * 注册一个http模板 * @param name http模板名称 * @param clientAbleSupplier 模板实例获取函数 */ public static synchronized void registerClient(String name, Supplier<HttpClientAble> clientAbleSupplier) ``` 即一个使用实例对象来注册,一个使用获取函数来注册。 当`HttpClientHelper`中尚未注册任何送信器的时候,第一个注册的http送信器会被作为默认送信器。当然,你也可以在注册后通过方法`setDefaultName(String defaultName)`来指定一个http送信器作为送信器。 ### **HttpClientHelper** 当你注册完成后,你可以使用`HttpClientHelper`的`getHttp(String name)` 或者 `getDefaultHttp()`方法来获取一个指定的或者默认的http送信器。 `HttpClientHelper`其自身也实现了接口`HttpClientAble`,你也可以直接通过`new HttpClientHelper()`来使用。其使用的真正http送信器为当前的默认送信器。