RestClient 写法

Posted wangquanyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RestClient 写法相关的知识,希望对你有一定的参考价值。

代码:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.*;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.*;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MimeType;
import org.springframework.util.MimeTypeUtils;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.io.File;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

@Component
@Slf4j
public class RestClient {

    @Value("${rest.url}")
    private String url_1;

    @Value(("${rest.username}"))
    private String username;

    @Value(("${rest.password}"))
    private String password;

    private  RestTemplate rest = null;
    
    public  String getByRest(String restPath, String param) throws Exception {
        ResponseEntity<String> request = request(restPath, HttpMethod.GET, param);
        return request.getBody();
    }
    
    public  byte[] getByImage(String restPath, String param) throws Exception {
        ResponseEntity<byte[]> request = request_image(restPath, HttpMethod.GET, param);
        return request.getBody();
    }
    
    public  String postByRest(String restPath, Map map) throws Exception {
        ResponseEntity<String> request = request_json(restPath, HttpMethod.POST, map);
        return request.getBody();
    }
    public  String postByUpload(String restPath, Map map) throws Exception {
        ResponseEntity<String> request = request_file(restPath, HttpMethod.POST, map);
        return request.getBody();
    }
    
    public  String postByRest(String restPath, String param) throws Exception {
        ResponseEntity<String> request = request_json(restPath, HttpMethod.POST, param);
        return request.getBody();
    }
    
    public  String putByRest(String restPath, Map map) throws Exception {
        ResponseEntity<String> request = request_json(restPath, HttpMethod.PUT, map);
        return request.getBody();
    }
    public  String putByUpload(String restPath, Map map) throws Exception {
        ResponseEntity<String> request = request_file(restPath, HttpMethod.PUT, map);
        return request.getBody();
    }
    
    public  String putByRest(String restPath, String param) throws Exception {
        ResponseEntity<String> request = request_json(restPath, HttpMethod.PUT, param);
        return request.getBody();
    }
    
    
    public  String deleteByRest(String restPath, Map map) throws Exception {
        ResponseEntity<String> request = request_json(restPath, HttpMethod.DELETE, map);
        return request.getBody();
    }
    
    public  String deleteByRest(String restPath, String param) throws Exception {
        ResponseEntity<String> request = request_json(restPath, HttpMethod.DELETE, param);
        return request.getBody();
    }
    public  String deleteByRestFormQuery(String restPath, String param) throws Exception {
        ResponseEntity<String> request = request(restPath, HttpMethod.DELETE, param);
        return request.getBody();
    }

    private  ResponseEntity<String> request(String restPath, HttpMethod method, String param) {
       String  url =  url_1+ restPath + "?" + param;
//        String url = "http://192.168.2.131:8080/api" + restPath + "?" + param;
        HttpHeaders headers = new HttpHeaders();
        HttpEntity<Map<String, Object>> entity = new HttpEntity<Map<String, Object>>(null, headers);
        ResponseEntity<String> exchange = getRest().exchange(url, method, entity, String.class);
        String body = exchange.getBody();
        JSONObject parseObject = JSON.parseObject(body);
        if("-2000".equals(parseObject.getString("code")) || "-10101".equals(parseObject.getString("code"))) {
            String loginUrl = url_1+"/v1/user/login";
            MultiValueMap<String, Object> paramName = new LinkedMultiValueMap<String, Object>();
            paramName.add("username", username);
            paramName.add("password", password);
            String string = rest.postForObject(loginUrl, paramName, String.class);  
            log.info(string);
            if(string.indexOf(""code": 0")!=-1){
               
            }
            exchange = rest.exchange(url, method, entity, String.class);
        }
        return exchange;
    }
    
    
    private  ResponseEntity<byte[]> request_image(String restPath, HttpMethod method, String param) {
        String url =  url_1+ restPath + "?" + param;
//       String url = "http://192.168.2.131:8080/api" + restPath + "?" + param;
       HttpHeaders headers = new HttpHeaders();
       MimeType mimeType = MimeTypeUtils.parseMimeType("application/octet_stream");
       MediaType mediaType = new MediaType(mimeType.getType(), mimeType.getSubtype(), Charset.forName("UTF-8"));
       // 请求体
//       headers.setContentType(mediaType);
       headers.setAccept(Arrays.asList(MediaType.IMAGE_JPEG));
       HttpEntity<byte[]> entity = new HttpEntity<byte[]>(headers);
       ResponseEntity<byte[]> exchange = getRest().exchange(url, method, entity, byte[].class);
       return exchange;
   }
    
    public  String getStructByImage(String type,String imgPath){
        String url = url_1;
        FileSystemResource resource = new FileSystemResource(new File(imgPath));
        MultiValueMap<String, Object> param = new LinkedMultiValueMap<String, Object>();
        param.add("type", type);  
        param.add("stream", resource); 
     //   param.add("fileName", "test.txt");     
        String jsonStr = getRest().postForObject(url, param, String.class);
        return jsonStr;
    }
    
    @SuppressWarnings("unchecked")
    private  ResponseEntity<String> request_file(String restPath, HttpMethod method, Map map) {
        String url =  url_1+ restPath;
//       String url = "http://192.168.2.199:8088/api" + restPath;
        HttpHeaders headers = new HttpHeaders();
        MimeType mimeType = MimeTypeUtils.parseMimeType("application/json");
        MediaType mediaType = new MediaType(mimeType.getType(), mimeType.getSubtype(), Charset.forName("UTF-8"));
        // 请求体
//        headers.setContentType(mediaType);
        // 发送请求
        HttpEntity<Map<String, Object>> entity = new HttpEntity<Map<String, Object>>(map, headers);
        ResponseEntity<String> exchange = getRest().exchange(url, method, entity, String.class);
        String body = exchange.getBody();
        JSONObject parseObject = JSON.parseObject(body);

        if("-2000".equals(parseObject.getString("code")) || "-10101".equals(parseObject.getString("code"))) {
            String loginUrl = url_1+"/v1/user/login";
            MultiValueMap<String, Object> paramName = new LinkedMultiValueMap<String, Object>();
            paramName.add("username", username);
            paramName.add("password", password);
            String string = rest.postForObject(loginUrl, paramName, String.class);
            log.info(string);
            if(string.indexOf(""code": 0")!=-1){

            }
            exchange = rest.exchange(url, method, entity, String.class);
        }

        return exchange;
    }
    
    @SuppressWarnings("unchecked")
    private  ResponseEntity<String> request_json(String restPath, HttpMethod method, Map map) {
         String  url =  url_1 + restPath;
//        String url = "http://192.168.2.199:8088/api" + restPath;
        HttpHeaders headers = new HttpHeaders();
        MimeType mimeType = MimeTypeUtils.parseMimeType("application/json");
        MediaType mediaType = new MediaType(mimeType.getType(), mimeType.getSubtype(), Charset.forName("UTF-8"));
        // 请求体
        headers.setContentType(mediaType);
        HttpEntity<Map<String, Object>> entity = new HttpEntity<Map<String, Object>>(map, headers);

        ResponseEntity<String> exchange = getRest().exchange(url, method, entity, String.class);
        String body = exchange.getBody();
        JSONObject parseObject = JSON.parseObject(body);
        if("-2000".equals(parseObject.getString("code")) || "-10101".equals(parseObject.getString("code"))) {
            String loginUrl = url_1+"/api/user/login";
            MultiValueMap<String, Object> paramName = new LinkedMultiValueMap<String, Object>();
            paramName.add("username", username);
            paramName.add("password", password);
            String string = rest.postForObject(loginUrl, paramName, String.class);
            log.info(string);
            if(string.indexOf(""code": 0")!=-1){

            }
            exchange = rest.exchange(url, method, entity, String.class);
        }
        return exchange;
    }
    
    private  ResponseEntity<String> request_json(String restPath, HttpMethod method, String param) {
        String url = url_1+ restPath;
//        String url = "http://localhost:8088" + restPath;
        HttpHeaders headers = new HttpHeaders();
        MimeType mimeType = MimeTypeUtils.parseMimeType("application/json");
        MediaType mediaType = new MediaType(mimeType.getType(), mimeType.getSubtype(), Charset.forName("UTF-8"));
        // 请求体
        headers.setContentType(mediaType);
        HttpEntity<String> entity = new HttpEntity<String>(param, headers);
        ResponseEntity<String> exchange = getRest().exchange(url, method, entity, String.class);
        String body = exchange.getBody();
        JSONObject parseObject = JSON.parseObject(body);
        if("-2000".equals(parseObject.getString("code")) || "-10101".equals(parseObject.getString("code"))) {
            String loginUrl = url_1+"/v1/user/login";
            MultiValueMap<String, Object> paramName = new LinkedMultiValueMap<String, Object>();
            paramName.add("username", username);
            paramName.add("password", password);
            String string = rest.postForObject(loginUrl, paramName, String.class);
            log.info(string);
            if(string.indexOf(""code": 0")!=-1){

            }
            exchange = rest.exchange(url, method, entity, String.class);
        }
        return exchange;
    }
    
    public  RestTemplate restTemplate() throws Exception { // 这个方法可以让RestTemplate保存session
        HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = null;
        // if(PropertiesUtil.getString("rest.url").startsWith("https")){
        // clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(new SSLClient(PropertiesUtil.getString("rest.jks_path"),
        // PropertiesUtil.getInt("rest.port")));
        // }else{
        clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();
//        clientHttpRequestFactory.setConnectTimeout(PropertiesUtil.getInt("rest.connectTimeout"));
//        clientHttpRequestFactory.setReadTimeout(PropertiesUtil.getInt("rest.readTimeout"));
//        clientHttpRequestFactory.setConnectionRequestTimeout(PropertiesUtil.getInt("rest.connectionRequestTimeout"));
        // }
        return new RestTemplate(clientHttpRequestFactory);
    }
    
    public  RestTemplate getRest() {
        try {
            if (rest == null) {
                rest = restTemplate();
//              String url = "http://192.168.2.131:8080/bigdata_restful_server/v1/user/login";
//                MultiValueMap<String, Object> param = new LinkedMultiValueMap<String, Object>();
//                param.add("username", "admin");
//                param.add("password", "123456"); 
//                String string = rest.postForObject(url, param, String.class);  
//                log.info(string);
//                if(string.indexOf(""code": 0")!=-1){
//                  
//                }
                // 添加数据库乱码转换
                List<HttpMessageConverter<?>> cos = new ArrayList<HttpMessageConverter<?>>();
                StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
                FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
                
                MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
                List<HttpMessageConverter<?>> cos2 = new ArrayList<HttpMessageConverter<?>>();
                cos2.add(stringHttpMessageConverter);
                cos2.add(new ByteArrayHttpMessageConverter());
                cos2.add(new ResourceHttpMessageConverter());
                formHttpMessageConverter.setPartConverters(cos2);
                cos.add(formHttpMessageConverter);
                cos.add(stringHttpMessageConverter);
                cos.add(mappingJackson2HttpMessageConverter);
                rest.setMessageConverters(cos);
            }
        } catch (Exception e) {
            // TODO: handle exception
            log.error("获取rest对象失败", e);
        }
        return rest;
    }
}

 

以上是关于RestClient 写法的主要内容,如果未能解决你的问题,请参考以下文章

Intellij IDEA使用restclient测试

Intellij IDEA使用restclient测试

Web Api 无法识别 RestClient 框架

Java中枚举的写法和用法

C# 错误:RestClient 从 SoapENV XML 读取值

编写代码片段的更简洁的方法