RestTemplate 发送http post请求
程序员文章站
2022-06-24 23:40:14
...
RestTemplate :
传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate来进行http或者https的调用
post请求
对于post请求提交有 FormData和Payload 两种形式:
1.第一种是formdata形式,在header参数里可以直接看到
2.payload则封装成json格式post过去,获取以后需要再解析成实体。
restTemplate post json格式 payload模式
首先需要注册restTemplate的bean
package com.fnm.feynman.hospital.web.config;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
/**
* @author yanjun.liu
* @date 2020/10/15--10:25
*/
@SpringBootConfiguration
public class RestTemplateConfig {
@Bean
RestTemplate restTemplate(){
return new RestTemplate();
}
}
然后进行发送消息
注入 RestTemplate
@Resource
private RestTemplate restTemplate;
发送请求
@GetMapping("/test")
public String test() {
OrderMessageNotice orderMessageNotice = new OrderMessageNotice();
orderMessageNotice.setOpenId("openId:3");
orderMessageNotice.setTitle("预约通知");
orderMessageNotice.setTask("您已成功预约锦绣苑社区卫生服务站的就诊预约,预约时间为:2020-09-28 10:00--11:00");
log.info("调用建行接口,预约订单url:{}",orderMessageNotice.getUrl());
JSONObject postData = (JSONObject)JSONObject.toJSON(orderMessageNotice);
String url="你要请求的url";
String body = restTemplate.postForEntity(url, postData, String.class).getBody();
log.info("调用建行接口,预约通知返回的结果body:{}",body);
//将返回的json字符串转为java Bean
OrderMessageNoticeResponse orderMessageNoticeResponse = JSON.parseObject(body, OrderMessageNoticeResponse.class);
orderMessageNoticeResponse.getSuccess()+orderMessageNoticeResponse.getMsg();
}
formdata模式。post提交
String url = 'http://posturl';
MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
map.add("shopid","1");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
return restTemplate.postForEntity(url, request,String.class);
//对header进行请求头设置,如果不设置也可以直接post那么就是如下的
//使用默认的请求头,
String url = 'http://posturl';
MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
map.add("shopid","1");
return restTemplate.postForEntity(url, map,String.class);