Java REST 的字符串格式 API url
Java String formatting for a REST API url
我正在尝试使用 String.format
在 Java 中格式化 URL。 API 采用以下形式的参数:
datafeed?boundingBox=-2.73389%2C%2053.64577%2C%20-2.06653%2C%2053.93593
所以,我正在尝试类似的方法:
public class MyClass {
public static void main(String args[]) {
double a = 53.64577;
double b = 2.73389;
double c = 53.93593;
double d = -2.06653;
String vmDataFeedUrlPatternWithBB = "datafeed?boundingbox=%f%2C%20%f%2C%20%f%2C%20%f";
System.out.println(String.format(vmDataFeedUrlPatternWithBB,a, b, c, d));
}
}
但是,这有问题并导致:
Exception in thread "main" java.util.IllegalFormatConversionException: c != java.lang.Double
也许我需要将逗号和 space 分别转换,但一直无法解决这个问题。
对于不属于字符串格式的 URL 个字符,您需要转义 %
符号。你通过复制它来逃避它 %%
。所以试试这个模式:
String vmDataFeedUrlPatternWithBB = "datafeed?boundingbox=%f%%2C%%20%f%%2C%%20%f%%2C%%20%f";
由于您在字符串格式表达式中 %2C
它被视为一个字符并期望一个字符值,因此它没有按预期工作。
要解决这个问题,您有 2 个选择:
1) 字符串联系:
final String COMMA = "%2C%20";
String vmDataFeedUrlPatternWithBB = "datafeed?boundingbox="+a+COMMA+b+COMMA+c+COMMA+d;
System.out.println(vmDataFeedUrlPatternWithBB);
OUTPUT:
datafeed?boundingbox=53.64577%2C%202.73389%2C%2053.93593%2C%20-2.06653
2) 使用URLEncoder
String vmDataFeedUrlPatternWithBB = "datafeed?boundingbox=";
String values = "%f,%f,%f,%f";
String s = String.format(values, a, b, c, d);
try {
String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString());
String finalValue = vmDataFeedUrlPatternWithBB + encode;
System.out.println(finalValue);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
OUTPUT:
datafeed?boundingbox=53.645770%2C2.733890%2C53.935930%2C-2.066530
我正在尝试使用 String.format
在 Java 中格式化 URL。 API 采用以下形式的参数:
datafeed?boundingBox=-2.73389%2C%2053.64577%2C%20-2.06653%2C%2053.93593
所以,我正在尝试类似的方法:
public class MyClass {
public static void main(String args[]) {
double a = 53.64577;
double b = 2.73389;
double c = 53.93593;
double d = -2.06653;
String vmDataFeedUrlPatternWithBB = "datafeed?boundingbox=%f%2C%20%f%2C%20%f%2C%20%f";
System.out.println(String.format(vmDataFeedUrlPatternWithBB,a, b, c, d));
}
}
但是,这有问题并导致:
Exception in thread "main" java.util.IllegalFormatConversionException: c != java.lang.Double
也许我需要将逗号和 space 分别转换,但一直无法解决这个问题。
对于不属于字符串格式的 URL 个字符,您需要转义 %
符号。你通过复制它来逃避它 %%
。所以试试这个模式:
String vmDataFeedUrlPatternWithBB = "datafeed?boundingbox=%f%%2C%%20%f%%2C%%20%f%%2C%%20%f";
由于您在字符串格式表达式中 %2C
它被视为一个字符并期望一个字符值,因此它没有按预期工作。
要解决这个问题,您有 2 个选择:
1) 字符串联系:
final String COMMA = "%2C%20";
String vmDataFeedUrlPatternWithBB = "datafeed?boundingbox="+a+COMMA+b+COMMA+c+COMMA+d;
System.out.println(vmDataFeedUrlPatternWithBB);
OUTPUT:
datafeed?boundingbox=53.64577%2C%202.73389%2C%2053.93593%2C%20-2.06653
2) 使用URLEncoder
String vmDataFeedUrlPatternWithBB = "datafeed?boundingbox=";
String values = "%f,%f,%f,%f";
String s = String.format(values, a, b, c, d);
try {
String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString());
String finalValue = vmDataFeedUrlPatternWithBB + encode;
System.out.println(finalValue);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
OUTPUT:
datafeed?boundingbox=53.645770%2C2.733890%2C53.935930%2C-2.066530