2017-04-24 5 views
0

でAPIに投稿するときに、私はAPIにJSONでいくつかのデータを投稿するスプリングスの残りのテンプレートを使用していますその値にダブルスと文字列の両方が含まれているHashMapを送ることができます。残念ながら、私のHashMapの値にはdoubleとStringの両方が含まれています。にはどうすれば正しくJSON

私は、次のデータ型とHashMapを使用しようとしました:私は投稿してる

{ 
    "VARIABLE_1":"0.0000", 
    "VARIABLE_2":"True", 
    "VARIABLE_3":"String" 
} 

残念ながらAPI:HashMapのは、しかし、私は結果のJSONではなく、次のようになりますことを発見しましたこれらの倍精度文字が文字列として送信されているときに正しく処理されていません。私はまだデータ型については無関係かもしれませんが、HttpEntity形式が正しく倍増しているのでしょうか?ここで

は、私が実際に使用しているコードの例です:

public void postMethod(HashMap<String,Object> input) { 

    CommonsClientHttpRequestFactory requestFactory = new CommonsClientHttpRequestFactory(); 
    restTemplate.setRequestFactory(requestFactory); 
    HttpEntity<HashMap<String,Object>> requestEntity = new HttpEntity<>(input, headers); 

    ResponseEntity<Result> result = restTemplate.postForEntity(uri, requestEntity, Result.class); 
    Result result = result.getBody(); 
} 
+0

これはPOJOではなく、マップを使用するための良い候補のように見えます。 –

+0

申し訳ありませんが、地図があなたのサンプルコードのどこに表示されているのかはっきりと分かりません。 'HttpEntity'のコンストラクタに対する' input'引数ですか? –

+0

ありがとう、それは少しそれをクリアします。さて、どのHttpEntityはそれですか? Commons HttpCoreのものはインターフェイスです。そのようにインスタンス化することはできません(またはまったく)。 –

答えて

1

あなたは直接ジャクソンライブラリにアクセスすることによって、カスタムJSONボディを作成することができます...

import org.springframework.http.HttpEntity; 
import org.springframework.http.HttpHeaders; 
import org.springframework.http.MediaType; 
import org.springframework.http.ResponseEntity; 
import org.springframework.http.client.CommonsClientHttpRequestFactory; 
import org.springframework.web.client.RestTemplate; 

その春の用途:

import com.fasterxml.jackson.databind.node.JsonNodeFactory; 
import com.fasterxml.jackson.databind.node.ObjectNode; 

... 

public void postMethod(HashMap<String,Object> input) { 
    ObjectNode jsonBody = JsonNodeFactory.instance.objectNode(); 
    for (Map.Entry<String, Object> entry : input.entrySet()) 
    { 
     String key = entry.getKey(); 
     Object value = entry.getValue(); 

     if (value instanceof Double) 
      jsonBody.put(key, (Double)value); 
     else if (value instanceof Boolean) 
      jsonBody.put(key, (Boolean)value); 
     else 
      jsonBody.put(key, value); 
    } 

    // ... make headers ... 

    HttpEntity<String> requestEntity = new HttpEntity<>(jsonBody.toString(), headers); 

    // ... make the post request ... 
} 

唯一のダムの部分は、あなたがあなたのvalueになるキャストしなければならないことですJavaがput(String, Object)メソッドのオーバーライドを呼び出すため、put()を呼び出してください。私に

関連する問題