场景:前端调用后端的接口完成设备参数的更新,后端在接口代码中需要调用设备端提供的接口来完成设备参数的更新。
RestTemplate 是用于同步client端访问 Restful 服务的一个核心类
默认使用 JDK 提供的包去建立HTTP连接
为每种 HTTP 请求都实现了相关的请求封装方法,根据HTTP的六个方法制定
HTTP method | RestTemplate methods |
---|---|
DELETE | delete |
GET | getForObject |
getForEntity | |
HEAD | headForHeaders |
OPTIONS | optionsForAllow |
POST | postForLocation |
postForObject | |
PUT | put |
any | exchange |
execute |
首先编写RestTemplate的配置类文章来源:https://www.toymoban.com/news/detail-797351.html
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
/**
* RestTemplate 配置类
* @author
*/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
//先获取到converter列表
List<HttpMessageConverter<?>> converters = builder.build().getMessageConverters();
for(HttpMessageConverter<?> converter : converters){
//因为我们只想要jsonConverter支持对text/html的解析
if(converter instanceof MappingJackson2HttpMessageConverter){
try{
//先将原先支持的MediaType列表拷出
List<MediaType> mediaTypeList = new ArrayList<>(converter.getSupportedMediaTypes());
//加入对text/html的支持
mediaTypeList.add(MediaType.TEXT_HTML);
mediaTypeList.add(MediaType.TEXT_PLAIN);
//将已经加入了text/html的MediaType支持列表设置为其支持的媒体类型列表
((MappingJackson2HttpMessageConverter) converter).setSupportedMediaTypes(mediaTypeList);
}catch(Exception e){
e.printStackTrace();
}
}
}
return builder.build();
}
}
由于设备端接口接收的参数为JSON类型,需要在后端将对象转换为JSON对象,并添加请求头文章来源地址https://www.toymoban.com/news/detail-797351.html
@Autowired
private RestTemplate restTemplate;
/**
* 获取相机参数
*
* @return
*/
@Override
public R getOrUpdateParams(CameraParameters cameraParameters) {
//调用RestTemplate 向设备端发送http请求
String url = "http://xx.xx.xx.x/8080/update_param";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
JSONObject jsonObject = new JSONObject(cameraParameters);
HttpEntity<String> httpEntity = new HttpEntity<>(jsonObject.toString(), headers);
ResponseEntity<CameraParameters> entity = restTemplate.exchange(url, HttpMethod.POST, httpEntity, CameraParameters.class);
}
return R.ok();
}
到了这里,关于RestTemplate调用Http方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!