springboot 网络请求方法汇总 post

谢奇略
2023-12-01

springboot的网络请求方法,post请求,带参,带header

一. RestTemplate

1. 返回数据类:

public class ResultVO<T> {
    private Integer code;
    private String msg;
    private T result;

    public ResultVO() {
    }

    public ResultVO(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public ResultVO(Integer code, String msg, T result) {
        this.code = code;
        this.msg = msg;
        this.result = result;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getResult() {
        return result;
    }

    public void setResult(T result) {
        this.result = result;
    }
}

2. 公共方法:

public class Utils {
    /*
    * 向目的URL发送post请求
    *
    * */
    public static ResultVO sendPostRequest(String url, MultiValueMap<String,String> params) {
        RestTemplate client = new RestTemplate();
        client.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());
        HttpHeaders headers = new HttpHeaders();
        headers.set("Content-Type","application/json;charset=UTF-8");
        headers.set("accessToken", "*******");
        headers.set("clientInfo","{" +
                "        \"version\": \"6.22.3 \"," +
                "        \"client\": \"iOS;iPhone XS Max;13.6.0\"" +
                "      }");
        HttpMethod method = HttpMethod.POST;
        //以表单的方式提交
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        //将请求头部和参数合成一个请求
        System.out.println("params===="+ params);
        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers);
        //执行HTTP请求,将返回的结构使用RestVO类格式化
        ResponseEntity<ResultVO> response = client.exchange(url, method, requestEntity, ResultVO.class);
        System.out.println("response=="+response.toString());
        return response.getBody();
    }

    /*
    * postForEntity请求
    *
    * */
    public static ResultVO sendPostRequest1(String url, MultiValueMap<String,String> params) {
        RestTemplate client = new RestTemplate();
        client.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());
        HttpHeaders headers = new HttpHeaders();
        headers.set("Content-Type","application/json;charset=UTF-8");
        headers.set("accessToken", "*******");
        headers.set("clientInfo","{" +
                "        \"version\": \"6.22.3 \"," +
                "        \"client\": \"iOS;iPhone XS Max;13.6.0\"" +
                "      }");
        HttpMethod method = HttpMethod.POST;
        //以表单的方式提交
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        //将请求头部和参数合成一个请求
        System.out.println("params===="+ params);
        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers);
//        //执行HTTP请求,将返回的结构使用RestVO类格式化
        ResponseEntity<ResultVO> response = client.postForEntity("http://10.***.**.**:8085/postTest",requestEntity,ResultVO.class);
        System.out.println("response=="+response.toString());
        return response.getBody();
    }
}

3. TaskService

@Service
public class TaskInfoServiceImpl {

    public List<TaskInfo> getTaskInfo(String typeIds, String userId) {
        String url = "http://**.**.**.***:1616/api/Task/getList";
        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
        params.add("typeId", typeIds);
        params.add("userId", userId);
        //发送Post数据并返回数据
        ResultVO resultVO = Utils.sendPostRequest1(url, params);
        if (resultVO.getCode() != 200) {//进行异常处理
            System.out.println("111111111111111");
        }
        System.out.println("111111"+resultVO.getResult());
        return (List<TaskInfo>) resultVO.getResult();
    }
}

4. 调用:

public class IndexController {
    @Autowired
    TaskInfoServiceImpl taskInfoService;
    @Autowired
    TaskService taskService;

    /*
     * 根据typeId和userId获取任务列表,并插入数据库
     * 传递过来的参数是HttpServletRequest,需要另外处理
     * */
    @RequestMapping("/getTasks")
    @ResponseBody
    public ResultVO getTaskList(HttpServletRequest request) {
        ServletInputStream is = null;
        try {
            is = request.getInputStream();
            StringBuilder sb = new StringBuilder();
            byte[] buf = new byte[1024];
            int len = 0;
            while ((len = is.read(buf)) != -1) {
                sb.append(new String(buf, 0, len));
            }
            System.out.println(sb.toString());
            JsonObject returnData = new JsonParser().parse(sb.toString()).getAsJsonObject();
            String typeId =returnData.getAsJsonPrimitive("typeId").getAsString();
            String userId =returnData.getAsJsonPrimitive("userId").getAsString();
            List<TaskInfo> taskInfoList;
            taskInfoList = taskInfoService.getTaskInfo(typeId, userId);
            //反序列化成对象
            ObjectMapper mapper = new ObjectMapper();
            List<TaskInfo> list = mapper.convertValue(taskInfoList, new TypeReference<List<TaskInfo>>() { });
            // 将查询到的数据插入数据库
            for(int i=0;i<list.size(); i++) {
                taskService.save(convertTask(list.get(i),userId));
            }
            return new ResultVO(200, "登录成功", taskInfoList);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null) {
                    is.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /*
     * 根据typeId和userId获取任务列表
     * 传递过来的参数是Map
     * */
    @RequestMapping("/getTasksParam")
    @ResponseBody
    public ResultVO getTaskListNew(@RequestBody Map params) {
        List<TaskInfo> taskInfoList;
        System.out.println("typeId="+params);
        String typeId = params.get("typeId").toString();
        String userId = params.get("userId").toString();
        taskInfoList = taskInfoService.getTaskInfo(typeId, userId);
        return new ResultVO(200, "登录成功", taskInfoList);

    }

    /*
    * 获取任务列表,不传参的情况
    * */
    @RequestMapping(value = "/getTaskList")
    @ResponseBody
    public ResultVO getTasks() {
        List<TaskInfo> taskInfoList;
        String typeId = "*****";
        String userId = "****";
        taskInfoList = taskInfoService.getTaskInfo(typeId, userId);
        //反序列化成对象
        ObjectMapper mapper = new ObjectMapper();
        List<TaskInfo> list = mapper.convertValue(taskInfoList, new TypeReference<List<TaskInfo>>() { });
        for(int i=0;i<list.size(); i++) {
            taskService.save(convertTask(list.get(i),userId));
        }
        return new ResultVO(200, "登录成功", taskInfoList);
    }

    /*
    * 从数据库中查询数据
    *
    * */
    @RequestMapping(value = "/getTasksLocal")
    @ResponseBody
    public ResultVO getTasksFromLocal(@RequestBody Map params) {
        String typeId = params.get("typeId").toString();
        String userId = params.get("userId").toString();
        return new ResultVO(200, "登录成功", taskService.findByUserId(userId));
    }

    public Task convertTask(TaskInfo taskInfo, String userId){
        Task task = new Task();
        task.setTaskId(taskInfo.getId());
        task.setTitle(taskInfo.getTitle());
        task.setContent(taskInfo.getContent());
        task.setJumpUrl(taskInfo.getJumpUrl());
        task.setScore(taskInfo.getScore());
        task.setTypeId(taskInfo.getTypeId());
        task.setIsPress(taskInfo.getIsPress());
        task.setUserId(userId);
        task.setIndustryCode(taskInfo.getIndustryCode());
        task.setLogId(taskInfo.getLogId());
        task.setModifyTime(taskInfo.getModifyTime());
        task.setParams(taskInfo.getParams());
        task.setSubPath(taskInfo.getSubPath());
        return task;
    }
}

二. HttpClient, HttpPost方法:

1。该方法需要在pom.xml中添加httpclient依赖才行:

<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>

2。公共方法:

package com.example.demo1.test;

import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import static org.apache.commons.codec.CharEncoding.UTF_8;

public class HttpUtil {

    public static String doPost(JSONObject date) {
        //下面注释掉的语句可以替代第一句
//        HttpClient client = HttpClientBuilder.create().build();
        HttpClient client = HttpClients.createDefault();
        // 要调用的接口方法
        String url = "http://**.**.**.***:1616/api/Task/getList";
        HttpPost post = new HttpPost(url);
        JSONObject jsonObject = null;
        String result = null;
        try {
            System.out.println("params=" +date.toString());
//            StringEntity s = new StringEntity(date.toJSONString(),UTF_8);
            StringEntity s = new StringEntity(date.toString());
//            s.setContentEncoding("UTF-8");
            s.setContentType("application/json");
            post.setEntity(s);
            post.setHeader("Content-Type", "application/json;charset=UTF-8");
            post.setHeader("accessToken", "********");
            post.setHeader("clientInfo", "{" +
                    "        \"version\": \"6.22.3 \"," +
                    "        \"client\": \"iOS;iPhone XS Max;13.6.0\"" +
                    "      }");
            HttpResponse res = client.execute(post);
            result = EntityUtils.toString(res.getEntity());
            System.out.println(result);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return result;
    }
}

3。调用:

在controller中加入:

@RequestMapping("/doPostGetJson")
    @ResponseBody
    public String doPostGetJson() throws ParseException {
        //此处将要发送的数据转换为json格式字符串
        JSONObject json = new JSONObject();
        json.put("typeId", "*****");
        json.put("userId", "*****");
        String sr = HttpUtil.doPost(json);
        System.out.println("返回参数:" + sr);
        return sr;
    }

 

 

 

 

 

 类似资料: