1

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); 
+0

私はRestTemplateに新しいStringHttpMessageConverter(Charset.forName( "UTF-8"))を追加しようとしましたが、これは効果がありません。 – dune76

+0

messageConvertersを削除/追加するのではなく、デフォルトの 'RestTemplate'を拡張して、この' MyRestTemplate'をcharsets(FormHttpとStringHttpのmessageConverters)で初期化し、 'doPost'を行う際に使用しました。どこか他のもの。ちょうど誰かが有用だと思うような場合には、@ dune76のために、新しいコンバータを追加するだけで、処理が最初のものを使うように見えるので、何の効果もないようです。また、コンバータの順番は重要です:最後に追加して同じクラスの他のものを削除すると、他のコンバータを使用しようとしますO_O – Alfabravo

+0

解決策を答えて受け入れるでしょう:) – Alfabravo

答えて

0

の特殊文字のサポートについてはこちらをSpring RestTemplate Charset UTF-8 does not work

を提供答えを参照してください、あなたはあなたのデータをエンコードする必要があります。

+1

私の場合私のデータをエンコーディングするのは良い考えではありません。私はすでにUTF-8文字列を持っていますので、もう一度エンコーディングしても意味がありません。この特定のケースでは、内部で定義されたすべてのHttpMessageConvertersがデフォルトでISO-8859-1を使用しているため、AsyncRestTemplateがUTF-8エンコーディングを失うという問題がありました。 – dune76

+0

しかし、とにかくリンク、おかげでスレッドに感謝します。 – dune76

+0

問題のOPが提供するソリューションは、データを明示的にエンコードすることなく動作します。 messageConvertersを設定するだけでうまくいきます。 – Alfabravo

関連する問題