Как кодировать данные Post JSON в CloseableHttpClient APi

#java #rest #post

Вопрос:

Я использовал API CloseableHttpClient для последующего вызова и базовую проверку подлинности для авторизации

 private CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httppost = new HttpPost("https://example.com");

MyJson myJson = new MyJson(); //custom java object to be posted as Request Body
Gson gson = new Gson();
String param = gson.toJson(myJson);
StringEntity urlparam = new StringEntity(param);

String credentials = username   ":"   passwprd;
String base64Credentials = new String(Base64.getencoder().encode(credentials.getBytes()));
String authorizartionHeader = "Basic"   base64Credentials;


httppost.setHeader("Content-Type", "application/Json");
httppost.setHeader("Authorization", authorizartionHeader);
urlparam.setContentEncoding("UTF-8");
httppost.setEntity(urlparam);
httpclient.execute(httppost);
 

Я получаю ошибку

«Недопустимый средний байт UTF-8»

Я закодировал JSON, но кодировка по-прежнему не работает для других языков, кроме английского. Как кодировать почтовые данные.

Я попытался использовать этот метод httppost.setEntity(new URLEncodedFormEntity(namevaluePair, "UTF-8")) , но у меня нет никакой пары имен, и если добавить в нее имя пользователя-pswd, то я получу ответ с нулевым указателем.

Комментарии:

1. Вы пробовали установить значение StringEntity как UTF 8 ? new StringEntity(param, StandardCharsets.UTF_8); ? И добавить заголовок ? .setHeader("Content-Type", "application/json;charset=UTF-8");

Ответ №1:

Вы должны попытаться установить все как UTF-8

 StringEntity urlparam = new StringEntity(param, StandardCharsets.UTF_8);
 

И добавьте правильный заголовок

 httppost.setHeader("Content-Type", "application/json;charset=UTF-8");