项目中遇到的问题,需要数据在两个项目之间进行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();
}