4
4
import co .nlighten .jsontransform .ParameterResolver ;
5
5
import co .nlighten .jsontransform .adapters .JsonAdapter ;
6
6
7
+ import java .net .URLEncoder ;
8
+ import java .nio .charset .StandardCharsets ;
7
9
import java .util .*;
8
10
import java .util .regex .Pattern ;
9
11
@@ -170,14 +172,16 @@ private void parse(String template, ParameterDefaultResolveOptions defaultResolv
170
172
values .add (buffer .toString ());
171
173
}
172
174
173
- String internalRender (ParameterResolver resolver , JsonAdapter <?,?,?> adapter ) {
175
+ String internalRender (ParameterResolver resolver , JsonAdapter <?,?,?> adapter , Boolean urlEncodeParameters ) {
174
176
StringBuilder sb = new StringBuilder ();
175
177
for (Object value : values ) {
176
178
if (value instanceof String s ) {
177
179
sb .append (s );
178
180
} else if (value instanceof TemplateParameter param ) {
179
- // escape param value
180
- sb .append (param .getStringValue (resolver , adapter ));
181
+ var renderedValue = param .getStringValue (resolver , adapter );
182
+ sb .append (Boolean .TRUE .equals (urlEncodeParameters )
183
+ ? URLEncoder .encode (renderedValue , StandardCharsets .UTF_8 )
184
+ : renderedValue );
181
185
}
182
186
}
183
187
return sb .toString ();
@@ -187,19 +191,29 @@ String internalRender(ParameterResolver resolver, JsonAdapter<?,?,?> adapter) {
187
191
* Renders the template after inserting the parameters
188
192
*
189
193
* @param resolver A resolver to extract parameter values
194
+ * @param adapter The adapter to use for rendering
195
+ * @param urlEncodeParameters if true, the parameters will be URL encoded
190
196
* @return a string with its parameters replaced
191
197
*/
192
- public String render (ParameterResolver resolver , JsonAdapter <?,?,?> adapter ) {
193
- var res = internalRender (resolver , adapter );
198
+ public String render (ParameterResolver resolver , JsonAdapter <?,?,?> adapter , Boolean urlEncodeParameters ) {
199
+ var res = internalRender (resolver , adapter , urlEncodeParameters );
194
200
while (UNESCAPED_OPEN_CURLY_BRACKET .matcher (res ).find ()) {
195
- res = get (res , defaultResolver ).internalRender (resolver , adapter );
201
+ res = get (res , defaultResolver ).internalRender (resolver , adapter , urlEncodeParameters );
196
202
}
197
203
// unescape
198
204
return res .replace ("\\ {" , "{" ).replace ("\\ }" , "}" );
199
205
}
200
206
201
207
public String render (ParameterResolver resolver ) {
202
- return render (resolver , JsonTransformerConfiguration .get ().getAdapter ());
208
+ return render (resolver , JsonTransformerConfiguration .get ().getAdapter (), false );
209
+ }
210
+
211
+ public String render (ParameterResolver resolver , JsonAdapter <?,?,?> adapter ) {
212
+ return render (resolver , adapter , false );
213
+ }
214
+
215
+ public String render (ParameterResolver resolver , Boolean urlEncodeParameters ) {
216
+ return render (resolver , JsonTransformerConfiguration .get ().getAdapter (), urlEncodeParameters );
203
217
}
204
218
205
219
public static Map <String , String > mapOf (String ... parameters ){
@@ -235,20 +249,28 @@ public String render(Map<String, ?> resolver) {
235
249
return render (ParameterResolver .fromMap (resolver ));
236
250
}
237
251
238
- public static String render (String template , ParameterResolver resolver , ParameterDefaultResolveOptions defaultResolver ) {
239
- return get (template , defaultResolver ).render (resolver );
252
+ public static String render (String template , ParameterResolver resolver , ParameterDefaultResolveOptions defaultResolver , Boolean urlEncodeParameters ) {
253
+ return get (template , defaultResolver ).render (resolver , urlEncodeParameters );
240
254
}
241
255
242
256
public static String render (String template , Map <String , ?> resolver , ParameterDefaultResolveOptions defaultResolver ) {
243
- return render (template , ParameterResolver .fromMap (resolver ), defaultResolver );
257
+ return render (template , ParameterResolver .fromMap (resolver ), defaultResolver , false );
258
+ }
259
+
260
+ public static String render (String template , ParameterResolver resolver , Boolean urlEncodeParameters ) {
261
+ return render (template , resolver , ParameterDefaultResolveOptions .UNIQUE , urlEncodeParameters );
262
+ }
263
+
264
+ public static String render (String template , Map <String , ?> resolver , Boolean urlEncodeParameters ) {
265
+ return render (template , ParameterResolver .fromMap (resolver ), ParameterDefaultResolveOptions .UNIQUE , urlEncodeParameters );
244
266
}
245
267
246
268
public static String render (String template , ParameterResolver resolver ) {
247
- return render (template , resolver , ParameterDefaultResolveOptions .UNIQUE );
269
+ return render (template , resolver , ParameterDefaultResolveOptions .UNIQUE , false );
248
270
}
249
271
250
272
public static String render (String template , Map <String , ?> resolver ) {
251
- return render (template , ParameterResolver .fromMap (resolver ), ParameterDefaultResolveOptions .UNIQUE );
273
+ return render (template , ParameterResolver .fromMap (resolver ), ParameterDefaultResolveOptions .UNIQUE , false );
252
274
}
253
275
254
276
}
0 commit comments