#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");