RestTemplate调用Http方法

 场景:前端调用后端的接口完成设备参数的更新,后端在接口代码中需要调用设备端提供的接口来完成设备参数的更新。

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的配置类

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> converters = builder.build().getMessageConverters();
        for(HttpMessageConverter converter : converters){
            //因为我们只想要jsonConverter支持对text/html的解析
            if(converter instanceof MappingJackson2HttpMessageConverter){
                try{
                    //先将原先支持的MediaType列表拷出
                    List 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对象,并添加请求头

    @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 httpEntity = new HttpEntity<>(jsonObject.toString(), headers);
        ResponseEntity entity = restTemplate.exchange(url, HttpMethod.POST, httpEntity, CameraParameters.class);  
      }
        return R.ok();
    }

你可能感兴趣的:(java,http,网络协议,RestTemplate)