我使用Springs rest模板将一些JSON数据发布到API。不幸的是,我的HashMap的值包含双精度和字符串。
我尝试使用具有以下数据类型的HashMap:HashMap,但是我发现生成的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;
不幸的是,我发布的API并没有正确处理这两个,因为它们是作为字符串发送的。是否有一些我仍然可以对数据类型不可知,但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();
}
...
JOIN
答案 0 :(得分:1)
您可以通过直接访问Spring使用的Jackson库来创建自定义JSON主体:
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
之前强制转换put()
,否则Java会调用put(String, Object)
方法覆盖。