@@ -51,6 +51,31 @@ public class SimpleClientHttpRequestFactory implements ClientHttpRequestFactory
51
51
52
52
private int readTimeout = -1 ;
53
53
54
+ /**
55
+ * Private constructor to be used by the Builder.
56
+ */
57
+ private SimpleClientHttpRequestFactory (Builder builder ) {
58
+ this .proxy = builder .proxy ;
59
+ this .chunkSize = builder .chunkSize ;
60
+ this .connectTimeout = builder .connectTimeout ;
61
+ this .readTimeout = builder .readTimeout ;
62
+ }
63
+
64
+ /**
65
+ * Default constructor.
66
+ * Use {@link #builder()} for a fluent API for configuration.
67
+ */
68
+ public SimpleClientHttpRequestFactory () {
69
+ }
70
+
71
+ /**
72
+ * Creates a new {@code Builder} for {@link SimpleClientHttpRequestFactory}.
73
+ * @return a new {@code Builder} instance
74
+ * @since 7.0
75
+ */
76
+ public static Builder builder () {
77
+ return new Builder ();
78
+ }
54
79
55
80
/**
56
81
* Set the {@link Proxy} to use for this request factory.
@@ -163,4 +188,99 @@ protected void prepareConnection(HttpURLConnection connection, String httpMethod
163
188
connection .setRequestMethod (httpMethod );
164
189
}
165
190
191
+
192
+ /**
193
+ * A builder for {@link SimpleClientHttpRequestFactory}.
194
+ * @since 7.0
195
+ */
196
+ public static class Builder {
197
+
198
+ @ Nullable
199
+ private Proxy proxy ;
200
+
201
+ private int chunkSize = DEFAULT_CHUNK_SIZE ;
202
+
203
+ private int connectTimeout = -1 ;
204
+
205
+ private int readTimeout = -1 ;
206
+
207
+ /**
208
+ * Set the {@link Proxy} to use for this request factory.
209
+ * @param proxy the proxy to use
210
+ * @return this builder
211
+ */
212
+ public Builder proxy (Proxy proxy ) {
213
+ this .proxy = proxy ;
214
+ return this ;
215
+ }
216
+
217
+ /**
218
+ * Set the number of bytes to write in each chunk when not buffering request
219
+ * bodies locally.
220
+ * @param chunkSize the chunk size
221
+ * @return this builder
222
+ */
223
+ public Builder chunkSize (int chunkSize ) {
224
+ this .chunkSize = chunkSize ;
225
+ return this ;
226
+ }
227
+
228
+ /**
229
+ * Set the underlying URLConnection's connect timeout (in milliseconds).
230
+ * A timeout value of 0 specifies an infinite timeout.
231
+ * <p>Default is the system's default timeout.
232
+ * @param connectTimeout the connect timeout in milliseconds
233
+ * @return this builder
234
+ */
235
+ public Builder connectTimeout (int connectTimeout ) {
236
+ this .connectTimeout = connectTimeout ;
237
+ return this ;
238
+ }
239
+
240
+ /**
241
+ * Set the underlying URLConnection's connect timeout as {@code Duration}.
242
+ * A timeout value of 0 specifies an infinite timeout.
243
+ * <p>Default is the system's default timeout.
244
+ * @param connectTimeout the connect timeout duration
245
+ * @return this builder
246
+ */
247
+ public Builder connectTimeout (Duration connectTimeout ) {
248
+ Assert .notNull (connectTimeout , "ConnectTimeout must not be null" );
249
+ this .connectTimeout = (int ) connectTimeout .toMillis ();
250
+ return this ;
251
+ }
252
+
253
+ /**
254
+ * Set the underlying URLConnection's read timeout (in milliseconds).
255
+ * A timeout value of 0 specifies an infinite timeout.
256
+ * <p>Default is the system's default timeout.
257
+ * @param readTimeout the read timeout in milliseconds
258
+ * @return this builder
259
+ */
260
+ public Builder readTimeout (int readTimeout ) {
261
+ this .readTimeout = readTimeout ;
262
+ return this ;
263
+ }
264
+
265
+ /**
266
+ * Set the underlying URLConnection's read timeout as {@code Duration}.
267
+ * A timeout value of 0 specifies an infinite timeout.
268
+ * <p>Default is the system's default timeout.
269
+ * @param readTimeout the read timeout duration
270
+ * @return this builder
271
+ */
272
+ public Builder readTimeout (Duration readTimeout ) {
273
+ Assert .notNull (readTimeout , "ReadTimeout must not be null" );
274
+ this .readTimeout = (int ) readTimeout .toMillis ();
275
+ return this ;
276
+ }
277
+
278
+ /**
279
+ * Builds a new {@link SimpleClientHttpRequestFactory} instance with the configured properties.
280
+ * @return a new {@link SimpleClientHttpRequestFactory}
281
+ */
282
+ public SimpleClientHttpRequestFactory build () {
283
+ return new SimpleClientHttpRequestFactory (this );
284
+ }
285
+ }
166
286
}
0 commit comments