本文主要针对post方式,发送请求。
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
/**
* 调用mufly_api接口
* Created by 耿洪生 on 2016/10/17.
*/
@Component
public class HttpEntityServiceImpl {
@Value("${muflyapi.appid}")
private String appID;
public ResponseEntity<String> responseHttpEntity(String url, Object parameters) {
Map<String, Object> requestObject = new HashMap<>();
requestObject.put("appID", appID);
requestObject.put("parameters", parameters);
//转json字符串
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(requestObject);
String jsonStr = jsonObject.toJSONString();
//设置HttpHeader
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json;charset=UTF-8");
//设置HttpEntity
HttpEntity<String> entity = new HttpEntity<String>(jsonStr, headers);
//设置连接、读取超时时间
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(30 * 1000);
factory.setReadTimeout(60 * 1000);
//接口调用
RestTemplate temp = new RestTemplate(factory);
ResponseEntity<String> output = temp.postForEntity(url, entity, String.class);
return output;
}
}
如果,你不想new,可以使用@Autowired直接引入:
@Autowired private RestTemplate restTemplate;
/** * post请求 * * @param url * @param data map类型 * @param token * @return 实体 */ public ResponseEntity<String> post(String url, Map data, String token) { HttpHeaders headers = new HttpHeaders(); headers.add("Accept", "application/json"); headers.add("Accept-Encoding", "gzip"); headers.add("Content-Encoding", "UTF-8"); headers.add("Content-Type", "application/json;charset=UTF-8"); headers.add("Token", token); String dataStr = JsonUtil.toJSon(data); HttpEntity<String> postEntity = new HttpEntity<>(dataStr, headers); return restTemplate.postForEntity(url, postEntity, String.class); }
至于设置restTemplate bean 的超时:
@Bean(name="restTemplate") RestTemplate restTemplate() { ClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); //设置连接、读取超时时间 ((SimpleClientHttpRequestFactory) factory).setConnectTimeout(30 * 1000); ((SimpleClientHttpRequestFactory) factory).setReadTimeout(60 * 1000); return new RestTemplate(); }
spring自带的restTemplate里有很多实用的方法,
其底层还是ClientHttpRequest,
以此记录。