当前位置: 首页 > news >正文

Java如何调用接口API并返回数据(两种方法)

Java如何调用接口API并返回数据(两种方法)
java处理请求接口后返回的json数据-直接处理json字符串
处理思路:

将返回的数据接收到一个String对象中(有时候需要自己选择性的取舍接收)
再将string转换为JSONObject对象
用get()方法获取到对应的值
注意:基于第三点的特殊情况,如果返回的json里面出现多组数据的情况,则需要转换为数据(用JSONObject.parseArrat()转换再进行操作 ,可无限套娃)

调用接口,请求数据

1.post方法

import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;import java.io.IOException;
import java.net.URI;
import java.util.*;   
public static JSONObject postResponse(String url,JSONObject jsonParam){HttpClient client = HttpClients.createDefault();
//     要调用的接口方法HttpPost post = new HttpPost(url);JSONObject jsonObject = null;try {StringEntity s = new StringEntity(jsonParam.toString(),"UTF-8");s.setContentType("application/json");post.setEntity(s);post.setHeader("Content-Type","application/json");HttpResponse res = client.execute(post);if(res.getStatusLine().getStatusCode() == HttpStatus.SC_OK){/*返回json格式*/jsonObject = JSONObject.parseObject(EntityUtils.toString(res.getEntity()));}} catch (IOException e) {System.out.println("接口调用出错!");e.printStackTrace();throw new RuntimeException(e);}return jsonObject;}

2.get方法

import com.alibaba.fastjson.JSONObject;
import edu.zhku.fire_ant_project.config.WxConstant;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;public class HttpCallOtherInterfaceUtils {public static void main(String args[]) {HttpClient client = HttpClients.createDefault();// 要调用的接口方法String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+ WxConstant.appid +"&secret="+WxConstant.secret;HttpGet httpGet=new HttpGet(url);JSONObject jsonObject = null;try {HttpResponse res = client.execute(httpGet);if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {// 返回json格式:jsonObject = JSONObject.parseObject(EntityUtils.toString(res.getEntity()));System.out.println(jsonObject);}} catch (Exception e) {System.out.println("服务间接口调用出错!");e.printStackTrace();}}
}

处理返回后的json数据

参考代码:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;public class JsonStr {public static void main(String[] args) {//1.比如从前端接收的是这个样子的json字符串,但是我们是不能直接获取到经度 纬度所对应的值的,所以必须要对这个字符串进行解析,String str = "{\"code\":\"0\"," +"\"error\":null," +"\"msg\":\"success\"," +"\"detail\":[\n" +"    {\"phoneNum\":\"013012401091\",\n" +"    \"lat\":34.431864,\n" +"    \"lon\":109.25992,\n" +"    \"height\":360,\n" +"    \"speed\":33,\n" +"    \"direction\":10,\n" +"    \"gpsTime\":1615420800000,\n" +"    \"gpsDateTime\":1615420800000,\n" +"    \"mileage\":253830800,\n" +"    \"alarms\":[24],\n" +"    \"status\":[1,2,21],\n" +"    \"property\":{}\n" +"    }" +" ]" +" }";//先转换成JSONObject类型JSONObject jsonObj = JSON.parseObject(str);//通过JSONObject中的getString("key")方法,得到对应的值  {"code":"0","error":null,"msg":"success"}这种类型System.out.println("code:"+jsonObj.getString("code"));//2.字符串中含有数组的,比如像detail中的数据JSONArray jsonInfo = JSONObject.parseArray(jsonObj.getString("detail"));//将jsonObj解析成json数组for (int i = 0; i < jsonInfo.size(); i++) {//遍历detail信息JSONObject jsonDetailInfo = jsonInfo.getJSONObject(i);//根据下标以此拿数据,每一个数据又是一个JSONObject对象,所以用JSONObject接收String lat = jsonDetailInfo.getString("lat");String lon = jsonDetailInfo.getString("lon");String gpsDateTime = jsonDetailInfo.getString("gpsDateTime");//然后进行其他处理System.out.println("lat:"+lat+";lon:"+lon+";gpsDateTime:"+gpsDateTime);}}
}
例子: 请求数据要求分页 所以采取循环返回值说明:{"code": "200","data": {"endRow": 2,"firstPage": 1,"hasNextPage": true,"hasPreviousPage": false,"isFirstPage": true,"isLastPage": false,"lastPage": 8,"list": [{"packingUnit": "盒", //包装单位"factory": "河北百善药业有限公司", //生产企业"salePrice": 11.7, //销售价"fullSalePrice": 11.5, //整件销售价"inventoryQuantity": 172, //库存"pictureUrl": "/upload/product/pic/2021/11/20101013-2-424389.png", //商品图片"policyTitle": "10盒起积0.5分/盒,20盒起积1分/盒",//商品政策:比如10盒积1分意思是10盒每盒减1元,10s5:表示买10盒送5盒"policyStartDate": "2022-11-01",//商品政策开始日期"policyEndDate": "2022-11-30",//商品政策结束日期"validDateStr": "2024-09-07",//最近批号有效期"batchNumber": "2207012",    //最近批号"registerFileUrl": "https://img.zc511.com/data/uploadRegisterFileOne.shtml?productCode=20101013-2",    //    注册资料下载URL"authorizeNumber": "国药准字Z20063720","rowId": 1,"barCode": "6909557000263",//商品条码"parseProductName": "接骨片",//商品名称"productCode": "20101013-2",//商品条码"countryCode": "ZG01AAJ0247010302685",//国家码 医保码"packingAmount": 200,//大包装"parseProductSpec": "60片",//规格"retailPrice": 196,//市场零售价"minPackingNumber": 0//最小购买包装}],"navigatePages": 8,"navigatepageNums": [1,2,3,4,5,6,7,8],"nextPage": 2,"pageNum": 1,"pageSize": 2,"pages": 5627,"prePage": 0,"size": 2,"startRow": 1,"total": 11254},"msg": "","success": true
}

HttpCilentutil

请求接口数据

import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;import java.io.IOException;
import java.net.URI;
import java.util.*;
public class HttpClientUtil 
{public static JSONObject postResponse(String url,JSONObject jsonParam){HttpClient client = HttpClients.createDefault();
//     要调用的接口方法HttpPost post = new HttpPost(url);JSONObject jsonObject = null;try {StringEntity s = new StringEntity(jsonParam.toString(),"UTF-8");s.setContentType("application/json");post.setEntity(s);post.setHeader("Content-Type","application/json");HttpResponse res = client.execute(post);if(res.getStatusLine().getStatusCode() == HttpStatus.SC_OK){/*返回json格式*/jsonObject = JSONObject.parseObject(EntityUtils.toString(res.getEntity()));}} catch (IOException e) {System.out.println("接口调用出错!");e.printStackTrace();throw new RuntimeException(e);}return jsonObject;}
//请求一次接口 先获取分页后的总数据public static Map<String,Object> getOneRequest(){String url ="http://gateway.zc511.com/getway/v2/product_list_get.shtml";JSONObject params = new JSONObject();params.put("timestamp","1650865510301");params.put("appKey","ZBKJ");params.put("secret","123");params.put("sign","1186D2A92FC3AB4E5671EBF58B9896A6");params.put("buyerCode","3330020298-1");params.put("pageNum","1");params.put("pageSize","2000");JSONObject jsonObject = HttpClientUtil.postResponse(url,params);
//        System.out.println("第一次请求:"+jsonObject);Boolean success = (Boolean) jsonObject.get("success");JSONObject data = (JSONObject) jsonObject.get("data");Boolean isLastPage =(Boolean) data.get("isLastPage");//是否为最后一页Integer pages =(Integer) data.get("pages");//一共多少页  按每页取多少条进行计算的(共可以获取多少次)Integer total = (Integer)data.get("total");// 总数据Integer pageNum = (Integer) data.get("pageNum");//当前页数Map<String, Object> response = new HashMap<>();response.put("pages",pages);response.put("isLastPage",isLastPage);response.put("total",total);response.put("data",data);response.put("pageNum",pageNum);return response;}
}

controller

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sun.org.apache.xpath.internal.operations.Bool;
import com.zc.zcdj.domain.LhkjHzhnData;
import com.zc.zcdj.domain.ResponseEntity;
import com.zc.zcdj.mapper.LhkjHzhnDataMapper;
import com.zc.zcdj.service.ILhkjHzhnDataService;
import com.zc.zcdj.utils.HttpClientUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcOperations;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collector;
import java.util.stream.Collectors;/*** <p>* 前端控制器* </p>** @author guoshanshan* @since 2023-03-21*/@Component
public class LhkjHzhnDataController {@Autowiredprivate ILhkjHzhnDataService lhkjHzhnDataService;@Autowiredprivate LhkjHzhnDataMapper lhkjHzhnDataMapper;@Autowiredprivate JdbcOperations jdbcTemplate;private static final Logger log = LoggerFactory.getLogger("获取珍诚全量数据");/*** 获取珍诚全量数据*/
//    @Scheduled(cron = "0 14 13 ? * *")
//    public void getAll(){
//        System.out.println("111111111111111111111111111111");
//        lhkjHzhnDataService.getProductList();
//    }@Scheduled(cron = "0 49 19 ? * *")public void getProductList() {Map<String, String> AllTybm = lhkjHzhnDataMapper.getTybm().stream().filter(s -> s.get统一商品编码() != null).filter(s -> s.get规则() != null).collect(Collectors.toMap(s -> s.get规则(), s -> s.get统一商品编码()));log.info("第一次请求珍诚接口...");
//        请求第一次获取数据总条数 以及分页后循环次数Map<String, Object> response = HttpClientUtil.getOneRequest();Integer pages = (Integer) response.get("pages");//Integer total = (Integer) response.get("total");Integer pageNum = (Integer) response.get("pageNum");//当前页数
//        Boolean isLastPage = (Boolean) response.get("isLastPage");
//        JSONObject data = (JSONObject) response.get("data");log.info("获取珍诚商品列表全量数据共有" + total + "条,共有" + pages + "页数据");log.info("珍诚全量开始执行...");for (int i = 1; i <= pages; i++) {String url = "http://gateway.zc511.com/getway/v2/product_list_get.shtml";JSONObject params = new JSONObject();params.put("timestamp", "1650865510301");params.put("appKey", "ZBKJ");params.put("secret", "123");params.put("sign", "1186D2A92FC3AB4E5671EBF58B9896A6");params.put("buyerCode", "3330020298-1");params.put("pageNum", pageNum);params.put("pageSize", "2000");JSONObject jsonObject = HttpClientUtil.postResponse(url, params);log.info("开始获取第" + i + "页数据");JSONObject data = (JSONObject) jsonObject.get("data");Boolean isLastPage = (Boolean) data.get("isLastPage");//是否为最后一页//        获取list中的商品数据 JSONArrayJSONArray list = data.getJSONArray("list");for (int j = 0; j < list.size(); j++) {LhkjHzhnData hzhnData = new LhkjHzhnData();String packingUnit = list.getJSONObject(j).getString("packingUnit");//包装单位Double salePrice = list.getJSONObject(j).getDouble("salePrice");//销售价String factory = list.getJSONObject(j).getString("factory");//生产企业Integer inventoryQuantity = list.getJSONObject(j).getInteger("inventoryQuantity");//库存Date validDateStr = list.getJSONObject(j).getDate("validDateStr");//有效期String authorizeNumber = list.getJSONObject(j).getString("authorizeNumber");//国药准字String barCode = list.getJSONObject(j).getString("barCode");//商品条码String parseProductName = list.getJSONObject(j).getString("parseProductName");//商品名称String packingAmount = list.getJSONObject(j).getString("packingAmount");//大包装String parseProductSpec = list.getJSONObject(j).getString("parseProductSpec");//规格String minPackingNumber = list.getJSONObject(j).getString("minPackingNumber");//最小购买包装if (authorizeNumber != null && parseProductSpec != null) {String authorizeNumberNew = authorizeNumber.replaceAll("[^a-zA-Z/0-9]", "");String parseProductSpecNew = parseProductSpec.replaceAll("[^0-9]", "");String tj = authorizeNumberNew.toUpperCase() + parseProductSpecNew;hzhnData.set统一编码("0");String tybm = (String) AllTybm.get(tj);if (tybm != null && tybm != "0") {hzhnData.set统一编码(tybm);}}hzhnData.set药品名称(parseProductName);hzhnData.set规格(parseProductSpec);hzhnData.set产地(factory);hzhnData.set单位(packingUnit);hzhnData.set大包装(packingAmount);hzhnData.set批准文号(authorizeNumber);hzhnData.set库存数量(inventoryQuantity);hzhnData.set价格(salePrice);hzhnData.setTxm(barCode);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");if (validDateStr != null) {hzhnData.set有效期(sdf.format(validDateStr));} else {hzhnData.set有效期(null);}hzhnData.set库区("珍诚");hzhnData.set供应商("珍诚");hzhnData.set中包装(minPackingNumber);Date date = new Date();SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");hzhnData.setStoragedate(sdf1.format(date));
//            hzhnData.set备注();
//            hzhnData.setHyid();System.out.println("第" + (j + 1) + "条" + hzhnData);lhkjHzhnDataMapper.insert(hzhnData);}pageNum += 1;}log.info("获取珍诚全量数据运行完毕...");}}

若是使用频率比较多,推荐使用对象的形式处理
利用阿里的fastjson,请注意前引用
在这里插入图片描述
关于Java对json字符串的处理,可以直接获取;但当使用频率较多的时候,就不太方便了。既然是面向对象编程,那就向json的数据转化为对象!

处理思路:

需要根据接收到的json对象构建对象。
将所有需要的数据全部封装为对象!
再利用阿里(fastjson)/google(Gson)的json转对象的方法
直接转为对象,再直接操作对象
假设以下是我们接收到的json,我们需要的是detail中的数据;

则需要构建实体dataItems以及包含dataItems的实体

然后直接进行转换:
在这里插入图片描述
示例代码:实体(假设都是String类型)

dataItems

@Data
public class DataIteams {private  String  phoneNum;private  String  aramDateTime;private  String  aramType;private  String  lon;private  String  lat;private  String  devNo;private  String  descripton;private  String  since;private  String  amc;}

detail的实体

import java.util.List;
@Data
public class Detail {private String pageCount;private String totalCount;private String pageIndex;private String pageSize;/***这个实体就是DataItems里面的数据体*/private List<DataItems> dataItems;}

当构建了实体以后就可以利用方法转换了!

示例代码:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;import java.util.HashMap;public class Main {public static void main(String[] args) {String str = "{\n" +"    \"code\": \"0\",\n" +"    \"error\": \"\",\n" +"    \"msg\": \"success\",\n" +"    \"detail\": {\n" +"        \"pageCount\": 1,\n" +"        \"totalCount\": 9,\n" +"        \"pageIndex\": 1,\n" +"        \"pageSize\": 1000,\n" +"        \"dataItems\": [\n" +"            {\n" +"                \"phoneNum\": \"027044039989\",\n" +"                \"aramDateTime\": 1616990185000,\n" +"                \"aramType\": 1,\n" +"                \"lon\": 114.224438,\n" +"                \"lat\": 30.55706,\n" +"                \"devNo\": \"\",\n" +"                \"descripton\": \"\",\n" +"                \"since\": \"\",\n" +"                \"amc\": \"\"\n" +"            },\n" +"            {\n" +"                \"phoneNum\": \"027044039989\",\n" +"                \"aramDateTime\": 1616990186000,\n" +"                \"aramType\": 1,\n" +"                \"lon\": 114.224457,\n" +"                \"lat\": 30.557187,\n" +"                \"devNo\": \"\",\n" +"                \"descripton\": \"\",\n" +"                \"since\": \"\",\n" +"                \"amc\": \"\"\n" +"            },\n" +"            {\n" +"                \"phoneNum\": \"027044039989\",\n" +"                \"aramDateTime\": 1616990190000,\n" +"                \"aramType\": 1,\n" +"                \"lon\": 114.224484,\n" +"                \"lat\": 30.557565,\n" +"                \"devNo\": \"\",\n" +"                \"descripton\": \"\",\n" +"                \"since\": \"\",\n" +"                \"amc\": \"\"\n" +"            },\n" +"            {\n" +"                \"phoneNum\": \"027044039989\",\n" +"                \"aramDateTime\": 1616990195000,\n" +"                \"aramType\": 1,\n" +"                \"lon\": 114.224434,\n" +"                \"lat\": 30.557971,\n" +"                \"devNo\": \"\",\n" +"                \"descripton\": \"\",\n" +"                \"since\": \"\",\n" +"                \"amc\": \"\"\n" +"            },\n" +"            {\n" +"                \"phoneNum\": \"027044039989\",\n" +"                \"aramDateTime\": 1616990196000,\n" +"                \"aramType\": 1,\n" +"                \"lon\": 114.224388,\n" +"                \"lat\": 30.558073,\n" +"                \"devNo\": \"\",\n" +"                \"descripton\": \"\",\n" +"                \"since\": \"\",\n" +"                \"amc\": \"\"\n" +"            },\n" +"            {\n" +"                \"phoneNum\": \"027044039989\",\n" +"                \"aramDateTime\": 1616990200000,\n" +"                \"aramType\": 1,\n" +"                \"lon\": 114.224297,\n" +"                \"lat\": 30.558436,\n" +"                \"devNo\": \"\",\n" +"                \"descripton\": \"\",\n" +"                \"since\": \"\",\n" +"                \"amc\": \"\"\n" +"            },\n" +"            {\n" +"                \"phoneNum\": \"027044039989\",\n" +"                \"aramDateTime\": 1614736039000,\n" +"                \"aramType\": 27,\n" +"                \"lon\": 114.204813,\n" +"                \"lat\": 30.553443,\n" +"                \"devNo\": \"\",\n" +"                \"descripton\": \"\",\n" +"                \"since\": \"\",\n" +"                \"amc\": \"\"\n" +"            },\n" +"            {\n" +"                \"phoneNum\": \"027044039989\",\n" +"                \"aramDateTime\": 1615342530000,\n" +"                \"aramType\": 27,\n" +"                \"lon\": 114.216378,\n" +"                \"lat\": 30.561051,\n" +"                \"devNo\": \"\",\n" +"                \"descripton\": \"\",\n" +"                \"since\": \"\",\n" +"                \"amc\": \"\"\n" +"            },\n" +"            {\n" +"                \"phoneNum\": \"027044039989\",\n" +"                \"aramDateTime\": 1616990178000,\n" +"                \"aramType\": 27,\n" +"                \"lon\": 114.222609,\n" +"                \"lat\": 30.554516,\n" +"                \"devNo\": \"\",\n" +"                \"descripton\": \"\",\n" +"                \"since\": \"\",\n" +"                \"amc\": \"\"\n" +"            }\n" +"        ]\n" +"    },\n" +"}";//先转换成JSONObject类型String json = JSON.parseObject(str).getString("detail");Detail detail = JSONObject.parseObject(json, Detail.class);System.out.println(detail);}}

在这里插入图片描述
获得的对象就可以直接使用get和set方法获取数据了

方法:

//Javabean对象转换成String类型的JSON字符串
JSONObject.toJSONString(Javabean对象)

//String类型的JSON字符串转换成Javabean对象
JSONObject.toJavaObject(JSON字符串,Javabean.class)

//Json字符串转换成JSONObject对象
JSONObject.parseObject(JSON字符串)

//JSON字符串转换成Javabean对象
JSONObject.parseObject(JSON字符串,Javabean.class)

相关文章:

Java如何调用接口API并返回数据(两种方法)

Java如何调用接口API并返回数据&#xff08;两种方法&#xff09; java处理请求接口后返回的json数据-直接处理json字符串 处理思路&#xff1a; 将返回的数据接收到一个String对象中&#xff08;有时候需要自己选择性的取舍接收&#xff09; 再将string转换为JSONObject对象 …...

极狐GitLab 价值流管理之「总时间图」使用指南

本文来源&#xff1a;about.gitlab.com 作者&#xff1a;Haim Snir 译者&#xff1a;极狐(GitLab) 市场部内容团队 对于软件研发管理者来说&#xff0c;了解在整个研发过程中时间都耗费在了哪些地方&#xff0c;是进行交付价值优化的关键洞察。GitLab / 极狐GitLab 新的价值流分…...

Mybatis入门和环境搭建

文章目录 一. Mybatis的简介1. 什么是ORM?2. 什么是持久层&#xff1f;3. Mybatis的作用 二. Mybatis环境搭建1. 搭建一个数据库2. 创建maven项目并导入相关依赖3. Mybatis相关插件安装4. Mybatis.cfg.xml核心配置文件 三. 基于ssm逆向工程的使用1. 配置generatorConfig.xml2.…...

React 全栈体系(二)

第二章 React面向组件编程 一、基本理解和使用 1. 使用React开发者工具调试 2. 效果 2.1 函数式组件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>1_函数式组件</title> </head> &l…...

【Linux】socket编程(二)

目录 前言 TCP通信流程 TCP通信的代码实现 tcp_server.hpp编写 tcp_server.cc服务端的编写 tcp_client.cc客户端的编写 整体代码 前言 上一章我们主要讲解了UDP之间的通信&#xff0c;本章我们将来讲述如何使用TCP来进行网络间通信&#xff0c;主要是使用socket API进…...

七大出海赛道解读,亚马逊云科技为行业客户量身打造解决方案

伴随全球化带来的新机遇和国内市场的进一步趋于饱和&#xff0c;近几年&#xff0c;中国企业出海快速升温&#xff0c;成为了新的创业风口和企业的第二增长曲线。从范围上看&#xff0c;出海市场由近及远&#xff0c;逐步扩张。从传统的东南亚市场&#xff0c;到成熟的北美、欧…...

【Maven教程】(三)基础使用篇:入门使用指南——POM编写、业务代码、测试代码、打包与运行、使用Archetype生成项目骨架~

Maven基础使用篇 1️⃣ 编写 POM2️⃣ 编写业务代码3️⃣ 编写测试代码4️⃣ 打包和运行5️⃣ 使用 Archetype生成项目骨架 1️⃣ 编写 POM 到目前为止&#xff0c;已经大概了解并安装好了Maven环境, 现在&#xff0c;我们开始创建一个最简单的 Hello World 项目。如果你是初次…...

Spring Boot + Spring Data JPA 实现数据库操作的标准示例

环境搭建 本篇使用H2内存数据库演示Spring Data JPA 的使用。 导入JPA和H2的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><…...

JVM——类加载器

回顾一下类加载过程 类加载过程&#xff1a;加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。 一个非数组类的加载阶段&#xff08;加载阶段获取类的二进制字节流的动作&#xff09;是可控性最强的阶段&#xff0c;这一步我们可以去完成还可以自定义…...

async/await 编程理解

博客主要是参考 Asynchronous Programming in Rust &#xff0c;会结合简单的例子&#xff0c;对 async 和 await 做比较系统的理解&#xff0c;如何使用 async 和 await 是本节的重点。 async 和 await 主要用来写异步代码&#xff0c;async 声明的代码块实现了 Future 特性&a…...

1. Java基础知识介绍

文章目录 1. Java基础知识介绍1. 简单输入输出1.1 输入1.2 输出 2. 数据类型2.1 基本数据类型2.2 引用数据类型 3. 函数4. 类基础知识5. 小结 1. Java基础知识介绍 1. 简单输入输出 在Java编程中&#xff0c;我们经常需要与用户进行交互&#xff0c;以获取输入并输出结果。Ja…...

基础shell小技巧01

1. 命令替换 shell脚本中最有用的特性之一是可以从命令输出中提取信息并将其赋给变量。把输出赋给变量之后&#xff0c;就可以随意在脚本中使用了。在脚本中处理数据时&#xff0c;这个特性显得尤为方便。 有两种方法可以将命令输出赋给变量。 反引号&#xff08;&#xff0…...

微信小程序--data的赋值与取值的几种方式

通过小程序官方文档可知&#xff1a; 赋值一定需要注意。需要setData的使用&#xff0c;这样页面才刷新&#xff0c;数据才会改变&#xff0c;并且分清that和this的使用 Page() 函数用来注册一个页面。接受一个 object 参数&#xff0c;其指定页面的初始数据、生命周期函数、事…...

条码通讯配置

由Leuze&#xff08;劳易测&#xff09; LSIS 222 M5M-R1/MA208i系统组成 连接说明及器件明细&#xff1a; 打开条码调试软件BPS Configuration tool对M208i进行ip 和端口号进行配置&#xff0c;条码选择作为客户端&#xff0c;输入ip和端口号&#xff0c;选择串口通讯波特…...

知网G4期刊《高考》简介及投稿要求

知网G4期刊《高考》简介及投稿要求 一、《高考》期刊简介&#xff1a; 主管单位&#xff1a;长春市委宣传部 主办单位&#xff1a;长春出版社 国内刊号22-1372/G4 国际刊号1673-6265 代号12-240 编辑单位&#xff1a;《高考》杂志社 出版周期&#xff1a;旬刊 类 …...

第7章 CPU前端优化

接下来讨论如何使用CPU监控特性寻找CPU上运行的代码中可被调优的位置。 标准的算法和数据结构在性能敏感型工作负载并不总能表现的很好。例如&#xff0c;在“扁平化”数据结构的冲击下&#xff0c;链表基本上快被放弃了。传统链表中的每个节点都是动态分配的&#xff0c;除了…...

idea新建Java-maven项目时,出现Dependency‘xxx(jar包名)‘ not found的解决方案

项目场景&#xff1a; 项目场景&#xff1a;使用idea创建maven项目时&#xff0c;导入简单依赖时&#xff08;本文以mysql-connector-java为例&#xff09;。 问题描述 问题&#xff1a; 首先&#xff0c;在创建新的maven项目中&#xff0c;出现下列两种情况&#xff1a; &am…...

STM32--USART串口

文章目录 通信接口串口通信硬件电路电平标准参数时序 USART主要特性框图 数据帧发送器 波特率发生器SWART串口发送与接收工程串口收发数据包 通信接口 通信接口是指连接中央处理器&#xff08;CPU&#xff09;和标准通信子系统之间的接口&#xff0c;用于实现数据和控制信息在不…...

2023年Java毕业设计题目推荐,怎样选题?500道毕业设计题目推荐

大家好&#xff0c;我是程序员徐师兄&#xff0c;最近有很多同学咨询&#xff0c;说毕业设计了&#xff0c;不知道选怎么题目好&#xff0c;有哪些是想需要注意的。 今天&#xff0c;我整理了一些Java毕业设计的题目,可以参考一下&#xff0c;希望对大家有所帮助 文章目录 一、…...

基于数据湖的多流拼接方案-HUDI概念篇

目录 一、为什么需要HUDI&#xff1f; 1. 传统技术选型存在哪些问题&#xff1f; 2. Hudi有什么优点&#xff1f; 基于 Hudi Payload 机制的多流拼接方案&#xff1a; 二、HUDI的应用场景 1. 什么场景适合使用hudi&#xff1f; 2. 什么场景不适合使用hudi&#xff1f; …...

OpenCV基础知识(5)— 几何变换

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。OpenCV中的几何变换是指改变图像的几何结构&#xff0c;例如大小、角度和形状等&#xff0c;让图像呈现出缩放、翻转、旋转和透视效果。这些几何变换操作都涉及复杂、精密的计算。OpenCV将这些计算过程都封装成了非常灵活的…...

Linux下源码安装MySQL 8.0

MySQL 8.0源码安装 环境准备步骤 环境准备 Linux环境&#xff0c;本文基于CentOS 8 MySQL安装包&#xff0c;本文基于MySQL 8.1&#xff0c;以下为带boost MySQL 8.1源码下载地址&#xff1a; https://dev.mysql.com/get/Downloads/MySQL-8.1/mysql-boost-8.1.0.tar.gz 步骤…...

大聪明教你学Java | 深入浅出聊 Java 内存模型

前言 🍊作者简介: 不肯过江东丶,一个来自二线城市的程序员,致力于用“猥琐”办法解决繁琐问题,让复杂的问题变得通俗易懂。 🍊支持作者: 点赞👍、关注💖、留言💌~ 在多线程环境下,多个线程同时访问共享数据可能导致一系列问题,如数据不一致、竞态条件和死锁等…...

SAP ABAPG开发屏幕自动生成日期的搜索帮助

代码如下&#xff1a; REPORT z_jason_test_f4 . TABLES: s031. PARAMETER p_spmon TYPE spmon DEFAULT sy-datum0(6) OBLIGATORY. SELECT-OPTIONS s_spmon FOR s031-spmon DEFAULT sy-datum0(6) OBLIGATORY. AT SELECTION-SCREEN ON VALUE-REQUEST…...

leetcode 674. 最长连续递增序列

2023.8.24 与最长递增子序列 类似&#xff0c;不同的是&#xff0c; 本题要求连续序列&#xff0c;所以不需要第二层遍历比较之前所有的元素了&#xff0c;只需要比较上一个元素i-1。 dp[i]的含义为&#xff1a;以nums[i]元素为结尾的序列的最长递增子序列。 注意这里是以i为结…...

Mysql简短又易懂

MySql 连接池:的两个参数 最大连接数&#xff1a;可以同时发起的最大连接数 单次最大数据报文&#xff1a;接受数据报文的最大长度 数据库如何存储数据 存储引擎&#xff1a; InnoDB:通过执行器对内存和磁盘的数据进行写入和读出 优化SQL语句innoDB会把需要写入或者更新的数…...

vue 简单实验 v-model 变量和htm值双向绑定

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"two-way-binding"><p>{{ message }}</p><input v-model"message" /> </div> <script>…...

测试框架pytest教程(8)失败重试-pytest-rerunfailures

pytest-rerunfailures是一个pytest插件&#xff0c;用于重新运行失败的测试用例。当测试用例在第一次运行时失败&#xff0c;该插件会自动重新运行指定次数的失败用例&#xff0c;以提高稳定性和减少偶发性错误的影响。 要使用pytest-rerunfailures插件&#xff0c;需要按照以…...

6个主流的工业3D管道设计软件

3D 管道设计软件是大多数行业工程工作的主要部分&#xff0c;例如&#xff1a; 电力、石油和天然气、石化、炼油厂、纸浆和造纸、化学品和加工业。 全球各工程公司使用了近 50 种工厂或管道设计软件。 每个软件都有优点和缺点&#xff0c;包括价格点。 EPC 和业主部门当前的趋势…...

基于微信小程序的垃圾分类系统设计与实现(2.0 版本,附前后端代码)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 1 简介 视频演示地址&#xff1a; 基于微信小程序的智能垃圾分类回收系统&#xff0c;可作为毕业设计 小…...

莱芜百度网站建设/好用的磁力搜索引擎

开启页面表单的Rest功能 spring:mvc:hiddenmethod:filter:enabled: true #开启页面表单的Rest功能<form action"/user" method"get"><input value"REST-GET提交" type"submit" /> </form><form action"/…...

网站建设预算费用/51link友链

以10为底的log函数&#xff1a;形式为 double log10(double x)以e为底的log函数(即 ln)double log (double x)如何表达log 以a为底b的对数&#xff1a;用换底公式&#xff1a;可以表达为&#xff1a;log(a)/log(b)#include#includeusing namespace std;int main(){double a3.…...

网站导航栏按钮/网络推广技术外包

Jsoniter 是一款快且灵活的 JSON 解析器&#xff0c;同时提供 Java 和 Go 两个版本。 最近发布的 0.9.8 版本对性能对标 Jackson 和 Protobuf 进行了详细的评测&#xff1a; https://github.com/json-itera... 。性能优化的原理会近期会发布于 infoq 中文站&#xff0c;尽请期待…...

阜阳公司网站建设/地推拉新app推广怎么做

centOS 5.3是Redhat最新的开源企业版的Linux 操作系统&#xff0c;这个系统与RHEL不同之处就在与RHEL提供付费的企业 服务&#xff0c;centOS是免费提供升级软件包&#xff0c;由开源社区支持&#xff0c;是RHEL的重编译二进制版本。前段时间写了RHEL的服务器环境搭建 心得&…...

网站运营推广方案/推广之家app下载

在ucenter进行备份出现 无法访问到该应用的备份接口&#xff0c;请拷贝 UCenter 根目录下api/dbbak.php 到该应用的api目录下 同时发现也discuz 通信失败。但是检查了 通信密钥: 都没有问题. 我的问题解决方案&#xff1a;已经自己解决了&#xff0c;给以后出现问题的人做参考…...

山东服务好的seo/seo职位要求

一、RequestMapping 映射请求 Spring MVC 通过RequestMapping注解可以定义不同的处理器映射规则。 RequestMapping放在类名上边&#xff0c;设置请求前缀 方法名上边设置请求映射url 二、映射请求参数、请求方法或请求头 RequestMapping 除了可以使用请求 URL 映射请求外&…...