Gukkey
Gukkey

Reputation: 69

Getting "Invalid JSON payload received. Unexpected token.\ncode=4%2***\n^" error

So I am trying to make a HTTP request to get access token and refresh token using following java code.

        String url = "https://oauth2.googleapis.com/token?";
        Map<String, String> parameters = new HashMap<>();
        parameters.put("code", "4%2******");
        parameters.put("client_id", "*****");
        parameters.put("client_secret", "*****");
        parameters.put("redirect_uri", "http://localhost");
        parameters.put("grant_type","authorization_code");
        parameters.put("access_type","offline");

        String form = parameters.keySet().stream()
        .map(key -> key + "=" + URLEncoder.encode(parameters.get(key), StandardCharsets.UTF_8))
        .collect(Collectors.joining("&"));

        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url))
        .headers("Content-Type", "application/json")
        .POST(BodyPublishers.ofString(form)).build();

        HttpResponse<?> response = client.send(request, BodyHandlers.ofString());
        System.out.println(response.statusCode() + response.body().toString());

But using this code gives the following error,

  "error": {
    "code": 400,
    "message": "Invalid JSON payload received. Unexpected token.\ncode=4%2****\n^",
    "status": "INVALID_ARGUMENT"
  }
}

What is the mistake that I have done here and should rectify in order to get proper results?

Upvotes: 0

Views: 1096

Answers (1)

gawi
gawi

Reputation: 2952

You are sending application/x-www-form-urlencoded data format but according to the response message you should send json. Try to change definition of form:

String form = new ObjectMapper().writeValueAsString(parameters);

Upvotes: 1

Related Questions