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