Search code examples
javastring-formatting

Java String formatting for a REST API url


I am trying to format a URL in Java using String.format. The API takes the parameters of the following form:

datafeed?boundingBox=-2.73389%2C%2053.64577%2C%20-2.06653%2C%2053.93593

So, I am trying something like:

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));
    }
}

However, this is having issues and results in:

Exception in thread "main" java.util.IllegalFormatConversionException: c != java.lang.Double

Maybe I need to convert the comma and space separately but have not been able to figure this out.


Solution

  • Since you've %2C in the String format expression it's treated as a character and expecting a character value hence it's not working as expected.

    To solve this problem you've 2 options:

    1) String Contactenation:

        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) Use 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