RestartmentエンティティでUTF-8でエンコードされたマルチパート/フォームデータを作成するのが難しいです。私は何が間違っているのか分かりません。 「L」 残りのテンプレートのようにそれを送る「?」:私は、例えば、テキストのパラメータに任意のポーランド語の文字を挿入すると、私はRestTemplateがUTF-8エンコーディングでmultipart/form-dataを送信する方法
LinkedMultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("text", text);
map.add("id", id);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set("Content-Type","multipart/form-data;charset=UTF-8");
HttpEntity<LinkedMultiValueMap<String, String>> entity = new HttpEntity<>(map, httpHeaders);
ListenableFuture<ResponseEntity<String>> response = asyncRestOperations
.postForEntity(url, entity, String.class);
を自分のコードを掲示し、以下の。あなたは、実際に体がこのようになりますと「L」が変換されることを、以下にそれを見ることができる「?」:
Content-Disposition: form-data; name="text"
Content-Type: text/plain;charset=ISO-8859-1
Content-Length: 1
?
それが正常に動作していない理由を私は知りません。デフォルトのISO-8859-1エンコーディングをUTF-8に変更する方法は?どのような助けも非常に感謝!
乾杯。 FOUND
SOLUTION:
私は少し私のAsyncRestTemplateを変更していないとそれはもはやUTF-8エンコーディングを失います。コードの私の作業ピース:
AsyncRestTemplate asyncRestTemplate = new AsyncRestTemplate();
List<HttpMessageConverter<?>> messageConverters = asyncRestTemplate.getMessageConverters();
StringHttpMessageConverter stringMessageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
AllEncompassingFormHttpMessageConverter allEncompassingConverter = new AllEncompassingFormHttpMessageConverter();
allEncompassingConverter.setCharset(Charset.forName("UTF-8"));
allEncompassingConverter.setMultipartCharset(Charset.forName("UTF-8"));
allEncompassingConverter.setPartConverters(Collections.singletonList(stringMessageConverter));
for (Iterator<HttpMessageConverter<?>> iterator = messageConverters.iterator(); iterator.hasNext();) {
HttpMessageConverter conv = iterator.next();
if (conv instanceof AllEncompassingFormHttpMessageConverter) {
iterator.remove();
}
}
messageConverters.add(allEncompassingConverter);
asyncRestTemplate.setMessageConverters(messageConverters);
私はRestTemplateに新しいStringHttpMessageConverter(Charset.forName( "UTF-8"))を追加しようとしましたが、これは効果がありません。 – dune76
messageConvertersを削除/追加するのではなく、デフォルトの 'RestTemplate'を拡張して、この' MyRestTemplate'をcharsets(FormHttpとStringHttpのmessageConverters)で初期化し、 'doPost'を行う際に使用しました。どこか他のもの。ちょうど誰かが有用だと思うような場合には、@ dune76のために、新しいコンバータを追加するだけで、処理が最初のものを使うように見えるので、何の効果もないようです。また、コンバータの順番は重要です:最後に追加して同じクラスの他のものを削除すると、他のコンバータを使用しようとしますO_O – Alfabravo
解決策を答えて受け入れるでしょう:) – Alfabravo