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

news2024/12/23 15:05:01

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 {

    @Autowired
    private ILhkjHzhnDataService lhkjHzhnDataService;
    @Autowired
    private LhkjHzhnDataMapper lhkjHzhnDataMapper;
    @Autowired
    private 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中的商品数据 JSONArray
            JSONArray 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/918932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shiro学习总结

第一章 入门概述 1.概念 shiro是一个Java安全框架&#xff0c;可以完成&#xff1a;认证、授权、加密、会话管理、与web集成、缓存… 2.优势 ● 易于使用&#xff0c;构建简单 ● 功能全面 ● 灵活&#xff0c;可以在任何应用程序环境中工作&#xff0c;并且不需要依赖它们…

log4框架

1.log4cplus基本元素 Layouts &#xff1a;控制输出消息的格式。 Appenders &#xff1a;输出位置。 Logger &#xff1a;日志对象。 Priorities &#xff1a;优先权&#xff0c;包括TRACE, DEBUG, INFO, WARNING, ERROR, FATAL。 2.log4cplus基本结构 3. 使用步骤&am…

2023年7月最新道路矢量数据(全国/分省/分城市)

2023年7月最新道路矢量数据&#xff08;全国/分省/分城市&#xff09; 道路数据是我们在各项研究中经常使用的数据&#xff01;道路数据虽然很常用&#xff0c;但是却基本没有能下载最近年份道路数据的网站&#xff0c;所以很多人不知道如何获到道路数据。 本次我们为大家推…

【80天学习完《深入理解计算机系统》】第九天 3.2 数据传送指令【mov】【栈和堆】【leaq】【一元操作】【二元操作】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

智慧充电桩物联网方案架构

智慧充电桩物联网采用“云-管-边-端”的边缘计算物联网架构&#xff0c;融合5G、AI、Wi-Fi 6等技术&#xff0c;实现充电基础设施由数字化向智能化演进。智慧充电桩物联网方案架构设计&#xff0c;如下图所示&#xff1a; 云端&#xff1a; 物联网平台具备广泛协议的南向接入…

.NET 最便捷的Log4Net日志记录器

最便捷的Log4Net使用方法 LOG4NET 配置日志记录器开始引用nuget LOG4NET 配置日志记录器 Apache log4net 库是一个帮助程序员将日志语句输出到各种的工具 的输出目标。log4net是优秀的Apachelog4j™框架的移植 Microsoft.NET 运行时。我们保持了与原始log4j相似的框架 同时利…

【javaweb】学习日记Day5 - 请求响应 分层解耦 IOC DI 三层架构

目录 一、请求响应 1、请求 &#xff08;1&#xff09;简单参数 ① GET请求 ② POST请求 ③ 假如形参与请求参数不一致 &#xff08;2&#xff09;实体参数 ① 简单实体对象 ② 复杂实体对象 &#xff08;3&#xff09;数组参数 &#xff08;4&#xff09;集合参数 …

研究生定向培养学徒对象及说明

研究生定向培养学徒开始招募啦&#xff0c;招募对象可以 1、免费学习 2、全真企业项目实战 3、拥有就业推荐机会 4、提供副业机会 研究生定向培养学徒报名时间&#xff1a; 2023年8月22日-2023年9月10日 研究生定向培养学徒招募对象&#xff1a; 1.毕业年度研究…

如何在地平线J5上部署RTA-VRTE v2.2应用程序

在地平线J5上部署RTA-VRTE v2.2应用程序流程图: 虽然在J5上使用ifconfig 命令看不到can0和can1被启动 登陆系统后ifconfig -a仍然能看到can0和can1。

Python(八十四)字符串的切片操作

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

Linux TCP协议——三次握手,四次挥手

一、TCP协议介绍 TCP协议是可靠的、面向连接的、基于字节流的传输层通信协议。 TCP的头部结构&#xff1a; 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;&#xff08;tcp是传输层的协议&#xff0c;端与端之间的数据传输&#xff0c;在TCP和UDP协议当中不会体现出I…

基于paddleocr的文档识别

1、版面分析 使用轻量模型PP-PicoDet检测模型实现版面各种类别的检测。 数据集&#xff1a; 英文&#xff1a;publaynet数据集的训练集合中包含35万张图像&#xff0c;验证集合中包含1.1万张图像。总共包含5个类别。 中文&#xff1a;CDLA据集的训练集合中包含5000张图像&a…

Vue3:通过路由写多个页面,通过不同的路径可以进入不同的页面

前言 Vue3&#xff1a;想通过路由写2个页面&#xff0c;不同的路径可以进入不同的页面 实现步骤 1、创建Vue3项目 通过脚手架创建一个Vue3的项目&#xff0c;然后在此基础上对文件进行增删改&#xff0c;修改成自己需要的项目框架 2、views文件夹 对应 页面文件 如果需要…

网络编程——网络基础知识

目录 一、网络历史两个重要名词1.1 阿帕网1.2 TCP/IP协议 二、局域网和广域网三、IP地址3.1 基本概念3.2 划分(IPV4)3.3 特殊IP地址3.4 子网掩码3.5 重新组网 四、网络模型4.1 网络的体系结构&#xff1a;4.2 OSI与TCP/IP模型4.2.1 OSI模型4.2.2 TCP/IP模型4.2.3 OSI和TCP/IP模…

C++,类的特殊函数练习

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream> using namespace std;cla…

OpenAI的Superalignment策略:计算为王

卷友们好&#xff0c;我是rumor。 对于怎么实现AGI这个玄学的目标&#xff0c;感觉大家都是差不多的状态&#xff1a;咱也不知道怎么做&#xff0c;但就是觉得现在的LLM技术还远远不够。 所以之前看到OpenAI说要用模型去做对齐研究[1]&#xff0c;以及最近发话要4年内做出Super…

创建R包-2.1:在RStudio中使用Rcpp制作R-Package(更新于2023.8.23)

目录 0-前言 1-在RStudio中创建R包项目 2-创建R包 2.1通过R函数创建新包 2.2在RStudio通过菜单来创建一个新包 2.3关于R包创建的说明 3-添加R自定义函数 4-添加C函数 0-前言 目标&#xff1a;在RStudio中创建一个R包&#xff0c;这个R包中包含C函数&#xff0c;接口是Rc…

牛客复盘] 2023河南萌新联赛第(七)场:信息工程大学 B\I 20230823

牛客复盘] 2023河南萌新联赛第&#xff08;七&#xff09;场&#xff1a;信息工程大学 B\I 20230823 总结B 七夕1. 题目描述2. 思路分析3. 代码实现 I 细胞分裂1. 题目描述2. 思路分析3. 代码实现 六、参考链接 总结 场外OB做了B和I题&#xff0c;只能说这场有点离谱。B 并查…

律师事务所微信小程序开发方案:实现智能化服务与用户体验的完美结合

随着移动互联网的快速发展&#xff0c;微信成为了人们日常生活中不可或缺的社交工具。为了满足用户对便捷、高效法律服务的需求&#xff0c;律师事务所微信小程序应运而生。本文将探讨律师事务所微信小程序的开发方案&#xff0c;旨在为读者提供一个专业、思考深度和逻辑性的指…

黑客自学笔记

谈起黑客&#xff0c;可能各位都会想到&#xff1a;盗号&#xff0c;其实不尽然&#xff1b;黑客是一群喜爱研究技术的群体&#xff0c;在黑客圈中&#xff0c;一般分为三大圈&#xff1a;娱乐圈 技术圈 职业圈。 娱乐圈&#xff1a;主要是初中生和高中生较多&#xff0c;玩网恋…