springboot项目之间通过httputils进行post数据对接

项目中遇到的问题,需要数据在两个项目之间进行post数据传输,在此记下。

发送方

发送方sendPost 通过json字符串进行传递,将数据放进json中装换为string字符串。

其中HttpUtils.sendPost是工具类,下方展示。

@PostMapping("/add")
public AjaxResult add(@RequestBody SysInform inform) {

    int inform1 = informService.insertInform(inform);

    JSONObject bo = new JSONObject();
    bo.put("domain",inform.getIpaddr());
    bo.put("website",inform.getWebName());
    bo.put("content",inform.getContent());
    String string = bo.toString();
    HttpUtils.sendPost("http://localhost:8080/api/event/verification",string);
    return AjaxResult.success(inform1);
}

接收方

接收方通过@requestbody进行接收

@PostMapping("/verification")
public AjaxResult<Void> addVerification(@Validated(AddGroup.class) @RequestBody HandleEventBo bo) {
    System.out.println(bo);
    bo.setStatus("0");
    bo.setSources(2L);
    bo.setNo(DateUtils.dateTimeNow());
    Long eventId=iHandleEventService.insertByBo(bo);
    if(eventId>0){
        return AjaxResult.success(eventId.toString());
    }
    return AjaxResult.error("添加失败!");
}

ps:在对接数据时,报错:Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

解决方案:

在工具类中设置contentType:application/json

接收方通过@RequestBody进行接收,接收类型为json字符串,不能是json对象。

传递json对象时,可以通过@RequestParam进行接收(未验证)。

工具类httputils

public static String sendPost(String url, String param){
    PrintWriter out = null;
    BufferedReader in = null;
    StringBuilder result = new StringBuilder();
    try{
        String urlNameString = url;
        log.info("sendPost - {}", urlNameString);
        // 创建URL对象
        URL realUrl = new URL(urlNameString);
        // 打开URL连接
        URLConnection conn = realUrl.openConnection();
        // 设置通用属性
        conn.setRequestProperty("accept", "*/*");
        conn.setRequestProperty("connection", "Keep-Alive");
        conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
        conn.setRequestProperty("Accept-Charset", "utf-8");
        conn.setRequestProperty("Content-type", "application/json");
        // 设置POST方法
        conn.setDoOutput(true);
        conn.setDoInput(true);
        // 获取URLConnetion对象对应的输出流
        out = new PrintWriter(conn.getOutputStream());
        out.print(param);
        // flush输出流的缓冲
        out.flush();
        // 定义BufferedReader输入流来读取URL的响应,设置编码方式
        in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
        String line;
        // 读取返回的内容
        while ((line = in.readLine()) != null){
            result.append(line);
        }
        log.info("data - {}",param);
        log.info("recv - {}", result);
    }
    catch (ConnectException e){
        log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
    }catch (SocketTimeoutException e){
        log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
    }catch (IOException e){
        log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
    }catch (Exception e){
        log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
    }
    finally{
        try{
            if (out != null){
                out.close();
            }
            if (in != null){
                in.close();
            }
        }catch (IOException ex){
            log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
        }
    }
    return result.toString();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值