統一響應,自定義校驗器,自定義異常,統一異常處理器

文章目錄

    • 1.基本準備(構建一個SpringBoot模塊)
        • 1.在A_universal_solution模塊下創建新的子模塊unified-processing
        • 2.pom.xml引入基本依賴
        • 3.編寫springboot啟動類
        • 4.啟動測試
    • 2.統一響應處理
        • 1.首先定義一個響應枚舉類 RespBeanEnum.java 每個枚舉對象都有code和message
        • 2.然后定義一個響應的Bean RespBean.java ,可以調用響應枚舉類,進行響應
        • 3.測試使用
          • 1.目錄結構
          • 2.ResponseTest.java
          • 3.瀏覽器測試
            • 1.成功響應,不攜帶數據。
            • 2.成功響應,攜帶數據。
            • 3.失敗響應,不攜帶數據。
            • 4.失敗響應,攜帶數據。
            • 5.測試withData方法。
            • 6.測試withMessage方法。
    • 3.自定義校驗器
        • 1.首先編寫一個Bean測試使用,LoginVo.java
        • 2.需求分析
          • 自定義校驗器來校驗手機號和密碼
        • 3.通用校驗器模板
          • 1.定義通用校驗器接口 GenericValidatorInterface.java
          • 2.自定義校驗注解 GenericValidation.java
          • 3.通用校驗器實現類 GenericValidatorImpl.java
          • 4.使用方式
            • 1.需求分析
            • 2.將模板復制一份,放到validator包下,準備進行修改
            • 3.要校驗的字段為Integer類型,也就是修改value類型
            • 4.注解中的value是int數組類型,也就是修改annotationValue的類型
            • 5.修改三個類的名字前綴為Test,直接修改然后alter +enter 讓IDEA自動修改
            • 6.TestValidatorImpl.java編寫校驗邏輯
            • 7.修改LoginVo.java 添加測試校驗字段
            • 8.編寫controller加上@Valid字段進行校驗
            • 9.測試
    • 4.統一異常處理器整合自定義校驗器
        • 1.編寫自定義異常攜帶響應枚舉對象 CustomException.java
        • 2.編寫全局異常處理器 GlobalExceptionHandler.java
        • 3.最佳實踐
          • 1.當需要響應error時直接拋出自定義異常對象,指定響應枚舉對象
          • 2.此時當出現參數綁定異常時也會交給統一異常處理解決
          • 3.當出現其他異常時,就會響應服務端異常,控制臺也會打印錯誤信息

1.基本準備(構建一個SpringBoot模塊)

1.在A_universal_solution模塊下創建新的子模塊unified-processing

image-20240506125441280

2.pom.xml引入基本依賴
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 繼承spring-boot父模塊 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version><relativePath/> <!-- 如果交給父模塊統一管理,但是又要繼承springboot的父模塊,就必須加這個 --></parent><artifactId>unified-processing</artifactId><packaging>jar</packaging><name>unified-processing</name><url>http://maven.apache.org</url><!-- 解決java: -source 1.5 中不支持 diamond 運算符 問題 --><properties><java.version>1.8</java.version><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><!--validation 參數校驗--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>2.4.5</version></dependency><!-- springboot兩個常規配置 --><!-- spring-boot-starter-web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- spring-boot-starter-test --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- lombok也是常規配置 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- jupiter測試 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.7.2</version><scope>compile</scope></dependency></dependencies><!-- maven打包插件--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
3.編寫springboot啟動類
package com.sun.solution;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** Description:** @Author sun* @Create 2024/5/6 13:00* @Version 1.0*/
@SpringBootApplication
public class UnifiedApplication {public static void main(String[] args) {SpringApplication.run(UnifiedApplication.class, args);}
}
4.啟動測試

image-20240506130251247

2.統一響應處理

1.首先定義一個響應枚舉類 RespBeanEnum.java 每個枚舉對象都有code和message
package com.sxs.seckill.vo;import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;/*** Description: 響應枚舉類** @Author sun* @Create 2024/5/5 15:15* @Version 1.0*/@Getter
@AllArgsConstructor
@ToString
public enum RespBeanEnum {// 通用SUCCESS(200, "SUCCESS"),ERROR(500, "服務端異常"),//登錄模塊LOGIN_ERROR(500210, "用戶名或者密碼錯誤"),MOBILE_ERROR(500211, "手機號碼格式不正確"),BING_ERROR(500212, "參數綁定異常"),MOBILE_NOT_EXIST(500213, "手機號碼不存在"),PASSWORD_UPDATE_FAIL(500214, "更新密碼失敗");//其他模塊。。。// 響應碼和響應信息private final Integer code;private final String message;
}
2.然后定義一個響應的Bean RespBean.java ,可以調用響應枚舉類,進行響應
package com.sxs.seckill.vo;import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;/*** 通用響應數據封裝類。* 提供了構造函數和靜態方法來創建響應對象,支持鏈式調用來設置屬性。*/
@Getter
@Setter
@Accessors(chain = true) // 支持鏈式調用
public class RespBean {private long code;private String message;private Object data;/*** 默認構造函數。*/public RespBean() {}/*** 構造函數,初始化響應碼和消息。* @param code 響應碼。* @param message 響應消息。*/public RespBean(long code, String message) {this.code = code;this.message = message;}/*** 構造函數,初始化響應碼、消息和數據。* @param code 響應碼。* @param message 響應消息。* @param data 響應數據。*/public RespBean(long code, String message, Object data) {this.code = code;this.message = message;this.data = data;}/*** 成功響應,攜帶數據。* @param data 響應數據。* @return 生成的成功響應對象。*/public static RespBean success(Object data) {return new RespBean(RespBeanEnum.SUCCESS.getCode(), RespBeanEnum.SUCCESS.getMessage(), data);}/*** 成功響應,不攜帶數據。* @return 生成的成功響應對象。*/public static RespBean success() {return new RespBean(RespBeanEnum.SUCCESS.getCode(), RespBeanEnum.SUCCESS.getMessage(), null);}/*** 錯誤響應,只攜帶錯誤枚舉。* @param respBeanEnum 錯誤枚舉,包含錯誤碼和消息。* @return 生成的錯誤響應對象。*/public static RespBean error(RespBeanEnum respBeanEnum) {return new RespBean(respBeanEnum.getCode(), respBeanEnum.getMessage(), null);}/*** 錯誤響應,攜帶錯誤枚舉和額外數據。* @param respBeanEnum 錯誤枚舉,包含錯誤碼和消息。* @param data 額外數據。* @return 生成的錯誤響應對象。*/public static RespBean error(RespBeanEnum respBeanEnum, Object data) {return new RespBean(respBeanEnum.getCode(), respBeanEnum.getMessage(), data);}/*** 設置響應數據。* @param data 響應數據。* @return 當前對象,支持鏈式調用。*/public RespBean withData(Object data) {this.data = data;return this;}/*** 設置響應消息。* @param message 響應消息。* @return 當前對象,支持鏈式調用。*/public RespBean withMessage(String message) {this.message = message;return this;}
}
3.測試使用
1.目錄結構

image-20240506131857665

2.ResponseTest.java
package com.sun.solution.conroller;import com.sun.solution.unified_response_processing.RespBean;
import com.sun.solution.unified_response_processing.RespBeanEnum;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** Description:** @Author sun* @Create 2024/5/6 13:07* @Version 1.0*/
@RestController
public class ResponseTest {/*** 成功響應,不攜帶數據。** @return*/@RequestMapping("/success1")public RespBean success1() {return RespBean.success();}/*** 成功響應,攜帶數據。** @return*/@RequestMapping("/success2")public RespBean success2() {return RespBean.success("成功響應,攜帶數據。");}/*** 失敗響應,不攜帶數據。** @return*/@RequestMapping("/error1")public RespBean error1() {return RespBean.error(RespBeanEnum.ERROR);}/*** 失敗響應,攜帶數據。** @return*/@RequestMapping("/error2")public RespBean error2() {return RespBean.error(RespBeanEnum.ERROR, "失敗響應,攜帶數據。");}/*** 測試withData方法** @return*/@RequestMapping("/withData")public RespBean withData() {return RespBean.error(RespBeanEnum.ERROR).withData("測試withData方法");}/*** 測試withMessage方法** @return*/@RequestMapping("/withMessage")public RespBean withMessage() {return RespBean.error(RespBeanEnum.ERROR).withMessage("測試withMessage方法");}}
3.瀏覽器測試
1.成功響應,不攜帶數據。

image-20240506132159483

2.成功響應,攜帶數據。

image-20240506132322584

3.失敗響應,不攜帶數據。

image-20240506132344487

4.失敗響應,攜帶數據。

image-20240506132403115

5.測試withData方法。

image-20240506132427551

6.測試withMessage方法。

image-20240506132447397

3.自定義校驗器

1.首先編寫一個Bean測試使用,LoginVo.java
package com.sun.solution.vo;import lombok.Data;/*** Description:** @Author sun* @Create 2024/5/6 13:29* @Version 1.0*/
@Data
public class LoginVo {private String mobile;private String password;
}
2.需求分析
自定義校驗器來校驗手機號和密碼
3.通用校驗器模板
1.定義通用校驗器接口 GenericValidatorInterface.java
package com.sun.solution.validator;/*** Description: 通用校驗器接口,用于重新定義校驗方法,使其更加靈活** @Author sun* @Create 2024/5/6 13:34* @Version 1.0*/public interface GenericValidatorInterface {/*** 校驗接口* @param value 待校驗的值,根據情況自定義類型* @param annotationValue 注解中的value值,根據情況自定義類型* @param required 是否必填* @return*/boolean isValid(String value, String annotationValue, boolean required);
}
2.自定義校驗注解 GenericValidation.java
package com.sun.solution.validator;import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;/*** Description: 自定義校驗注解** @Author sun* @Create 2024/5/6 13:38* @Version 1.0*/
@Documented
@Constraint(validatedBy = GenericValidatorImpl.class) // 1.這里是校驗器的實現類
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface GenericValidation {// 2.這里是注解的屬性// message是校驗失敗時的提示信息String message() default "校驗失敗!";// value是注解的值,可以根據情況自定義類型,類型改變則校驗器也需要改變String value() default "";// required是是否必填boolean required() default true;// 下面這兩個屬性必須添加,是默認屬性Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}
3.通用校驗器實現類 GenericValidatorImpl.java
package com.sun.solution.genericvalidator;import org.springframework.util.StringUtils;import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;/*** Description: 通用校驗器實現類,ConstraintValidator<TestValidation, String>中的兩個參數分別是注解和校驗的值類型** @Author sun* @Create 2024/5/6 13:42* @Version 1.0*/
public class GenericValidatorImpl implements ConstraintValidator<GenericValidation, String>, GenericValidatorInterface {// 注解中的value值,根據情況自定義類型private String annotationValue;// 注解中的required值,表示是否必填private boolean required;/*** 初始化方法,獲取注解中的value值和required值* @param annotation*/@Overridepublic void initialize(GenericValidation annotation) {this.annotationValue = annotation.value();this.required = annotation.required();}/*** 初始的校驗方法* @param value* @param context* @return*/@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {return isValid(value, annotationValue, required);}/*** 增強的校驗方法* @param value 待校驗的值* @param annotationValue 注解中的value值,根據情況自定義類型* @param required 是否必填* @return*/@Overridepublic boolean isValid(String value, String annotationValue, boolean required) {// 校驗邏輯編寫,根據三個參數進行校驗return false;}
}
4.使用方式
1.需求分析

假設,要校驗的字段類型是Integer類型,注解中的value是int數組類型

2.將模板復制一份,放到validator包下,準備進行修改

image-20240506142134488

3.要校驗的字段為Integer類型,也就是修改value類型

GenericValidatorInterface.java

image-20240506142712265

GenericValidatorImpl.java

image-20240506142756701

4.注解中的value是int數組類型,也就是修改annotationValue的類型

GenericValidation.java

image-20240506143335834

GenericValidatorImpl.java

image-20240506143407645

GenericValidatorInterface.java

image-20240506143434441

5.修改三個類的名字前綴為Test,直接修改然后alter +enter 讓IDEA自動修改

image-20240506143656011

6.TestValidatorImpl.java編寫校驗邏輯
    /*** 增強的校驗方法* @param value 待校驗的值* @param annotationValue 注解中的value值,根據情況自定義類型* @param required 是否必填* @return*/@Overridepublic boolean isValid(Integer value, int[] annotationValue, boolean required) {// 如果不是必填項,且值為空,則直接返回trueif (!required && value == null) {return true;}// 如果是必填項,且值為空,則直接返回falseif (required && value == null) {return false;}// 如果注解中的value值不為空,且待校驗的值不在value值中,則返回falseif (annotationValue.length > 0) {for (int i : annotationValue) {if (value == i) {return true;}}return false;}return true;}
7.修改LoginVo.java 添加測試校驗字段
package com.sun.solution.vo;import com.sun.solution.validator.TestValidation;
import lombok.Data;/*** Description:** @Author sun* @Create 2024/5/6 13:29* @Version 1.0*/
@Data
public class LoginVo {private String mobile;private String password;@TestValidation(value = {1, 2, 3}, required = true)private Integer test;
}
8.編寫controller加上@Valid字段進行校驗
package com.sun.solution.conroller;import com.sun.solution.unified_response_processing.RespBean;
import com.sun.solution.vo.LoginVo;
import org.springframework.web.bind.annotation.*;import javax.validation.Valid;/*** Description:** @Author sun* @Create 2024/5/6 14:56* @Version 1.0*/
@RestController
public class ValidationTest {@PostMapping("/test")public RespBean test(@Valid @RequestBody LoginVo loginVo) {return RespBean.success("success!");}
}
9.測試

image-20240506150821623

image-20240506150835102

4.統一異常處理器整合自定義校驗器

1.編寫自定義異常攜帶響應枚舉對象 CustomException.java
package com.sun.solution.exception;import com.sun.solution.unified_response_processing.RespBeanEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** Description: 自定義異常類,具有響應枚舉的屬性。** @Author sun* @Create 2024/5/6 15:15* @Version 1.0*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CustomException extends RuntimeException{private RespBeanEnum respBeanEnum;
}
2.編寫全局異常處理器 GlobalExceptionHandler.java
package com.sun.solution.exception;import com.sun.solution.unified_response_processing.RespBean;
import com.sun.solution.unified_response_processing.RespBeanEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;/*** Description:** @Author sun* @Create 2024/5/6 15:16* @Version 1.0*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {// 處理所有的異常@ExceptionHandler(Exception.class)public RespBean exceptionHandler(Exception e) {// 日志記錄異常信息及堆棧log.error("Exception caught: ", e); // 如果得到的是自定義異常的對象,那么直接返回這個異常的響應枚舉類信息if (e instanceof CustomException) {CustomException ex = (CustomException) e;return RespBean.error(ex.getRespBeanEnum());} else if (e instanceof BindException) {// 如果是綁定異常,就獲取綁定異常的message信息,返回給前端// 需要獲取改異常 BindException,進行打印BindException ex = (BindException) e;// 獲取綁定異常的信息RespBean respBean = RespBean.error(RespBeanEnum.BING_ERROR).withMessage("參數校驗異常:" +ex.getBindingResult().getAllErrors().get(0).getDefaultMessage());return respBean;}// 如果不是自定義異常,那么返回服務端異常return RespBean.error(RespBeanEnum.ERROR);}
}
3.最佳實踐
1.當需要響應error時直接拋出自定義異常對象,指定響應枚舉對象

image-20240506153836780

image-20240506153848112

2.此時當出現參數綁定異常時也會交給統一異常處理解決

image-20240506154042389

3.當出現其他異常時,就會響應服務端異常,控制臺也會打印錯誤信息

image-20240506154219232

image-20240506154225690

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/22783.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/22783.shtml
英文地址,請注明出處:http://en.pswp.cn/web/22783.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

信息學奧賽初賽天天練-20-完善程序-vector數組參數引用傳遞、二分中值與二分邊界應用的深度解析

PDF文檔公眾號回復關鍵字:20240605 1 2023 CSP-J 完善程序1 完善程序&#xff08;單選題&#xff0c;每小題 3 分&#xff0c;共計 30 分&#xff09; 原有長度為 n1,公差為1等升數列&#xff0c;將數列輸到程序的數組時移除了一個元素&#xff0c;導致長度為 n 的開序數組…

云原生架構案例分析_5.某體育用品公司云原生架構的業務中臺構建

1.背景和挑戰 某體育用品公司作為中國領先的體育用品企業之一&#xff0c;在2016年&#xff0c;某體育用品公司啟動集團第三次戰略升級&#xff0c;打造以消費者體驗為核心的“3”&#xff08;“互聯網”、“體育”和“產品”&#xff09;的戰略目標&#xff0c;積極擁抱云計算…

NeuralForecast TokenEmbedding 一維卷積 (Conv1d) 與矩陣乘法

NeuralForecast TokenEmbedding 一維卷積 (Conv1d) 與矩陣乘法 flyfish TokenEmbedding中使用了一維卷積 (Conv1d) TokenEmbedding 源碼分析 在源碼的基礎上增加調用示例 下面會分析這段代碼 import torch import torch.nn as nn class TokenEmbedding(nn.Module):def __i…

C++模板類與Java泛型類的實戰應用及對比分析

C模板類和Java泛型類都是用于實現代碼重用和類型安全性的重要工具&#xff0c;但它們在實現方式和應用上有一些明顯的區別。下面&#xff0c;我將先分別介紹它們的實戰應用&#xff0c;然后進行對比分析。 C模板類的實戰應用 C模板類允許你定義一種通用的類&#xff0c;其中類…

SEO 與 PPC 之間的區別

按點擊付費 &#xff08;PPC&#xff09;&#xff1a; PPC 是一種網絡營銷技術&#xff0c;廣告商在每次點擊廣告時向網站支付一定金額&#xff0c;廣告商只為符合條件的點擊付費。Google 廣告、Bing 和 Yahoo 廣告基于按點擊付費的概念。PPC是用于在搜索引擎首頁上列出的最快方…

【前端】響應式布局筆記——rem

三、rem 指相對于根元素的字體大小的單位。 根字體大小通常設置為10px,方便換算。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…

鴻蒙開發接口安全:【@system.cipher (加密算法)】

加密算法 說明&#xff1a; 本模塊首批接口從API version 3開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。 導入模塊 import cipher from system.ciphercipher.rsa rsa(Object): void RSA 算法加解密。 系統能力&#xff1a; SystemCapabil…

Pointnet++改進卷積系列:全網首發SMPConv連續卷積 |即插即用,提升特征提取模塊性能

簡介:1.該教程提供大量的首發改進的方式,降低上手難度,多種結構改進,助力尋找創新點!2.本篇文章對Pointnet++特征提取模塊進行改進,加入SMPConv,提升性能。3.專欄持續更新,緊隨最新的研究內容。 目錄 1.理論介紹 2.修改步驟 2.1 步驟一 2.2 步驟二 2.3 步驟

K8S==ingress配置自簽名證書

安裝openssl Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 生成證書 openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout example.local.key -out example.local.crt -subj "/CNexample.local/Oexample.local"創建K8S secr…

【簡單講解TalkingData的數據統計】

&#x1f3a5;博主&#xff1a;程序員不想YY啊 &#x1f4ab;CSDN優質創作者&#xff0c;CSDN實力新星&#xff0c;CSDN博客專家 &#x1f917;點贊&#x1f388;收藏?再看&#x1f4ab;養成習慣 ?希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出…

Vue3中的常見組件通信之mitt

Vue3中的常見組件通信之mitt 概述 ? 在vue3中常見的組件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的組件關系用不同的傳遞方式。常見的撘配形式如下表所示。 組件關系傳遞方式父傳子1. props2. v-model3. $refs…

用例篇03

正交表 因素&#xff1a;存在的條件 水平&#xff1a;因素的取值 最簡單的正交表&#xff1a;L4(2) 應用 allpairs 來實現正交表。 步驟&#xff1a; 1.根據需求找出因素和水平 2.將因素和水平寫入到excel表格中&#xff08;表格不需要保存&#xff09;&#xff08;推薦用…

SpaceX 首席火箭著陸工程師 MIT論文詳解:非凸軟著陸最優控制問題的控制邊界和指向約束的無損凸化

上一篇blog翻譯了 Lars Blackmore(Lars Blackmore is principal rocket landing engineer at SpaceX)的文章&#xff0c;SpaceX 使用 CVXGEN 生成定制飛行代碼,實現超高速機載凸優化。利用地形相對導航實現了數十米量級的導航精度,著陸器在著陸過程中成像行星表面并將特征與機載…

PHP序列化、反序列化

目錄 一、PHP序列化&#xff1a;serialize() 1.對象序列化 2.pop鏈序列化 3.數組序列化 二、反序列化&#xff1a;unserialize() 三、魔術方法 ?四、NSSCTF相關簡單題目 1.[SWPUCTF 2021 新生賽]ez_unserialize 2.[SWPUCTF 2021 新生賽]no_wakeup 學習參考&#xff1…

054、Python 函數的概念以及定義

編程大師Martin Fowler曾說過&#xff1a;“代碼有很多種壞味道&#xff0c;重復是最壞的一種。” 那么遇到重復的代碼&#xff0c;如何做&#xff1f;答案就是&#xff1a;函數。 函數就是把重復的代碼封裝在一起&#xff0c;然后通過調用該函數從而實現在不同地方運行同樣的…

解決MAC M1 Docker Desktop啟動一直在starting

問題描述&#xff1a; 今天使用docker buildx 構建Multi-platform&#xff0c;提示如下錯誤&#xff1a; ERROR: Multi-platform build is not supported for the docker driver. Switch to a different driver, or turn on the containerd image store, and try again. 于是按…

蘋果ios用戶下載ipa文件內測簽名的后的app應用下載安裝到手機圖標消失了是什么原因呢?

下載好的應用竟然找不到了&#xff1f;究竟有哪些原因呢&#xff1f;本篇文章將總結一些可能性&#xff01; 若你在蘋果設備上下載了一個應用程序&#xff0c;但它的圖標不見了&#xff0c;可能有以下幾種原因&#xff1a; 1. 刪除應用的時候出現彈窗如果你錯誤的點擊到了從…

EasyRecovery2024破解版本下載,電腦數據恢復新突破!

在當今數字化時代&#xff0c;數據安全和軟件版權已成為全球關注的熱點。EasyRecovery&#xff0c;作為一款廣受歡迎的數據恢復軟件&#xff0c;因其強大的數據恢復功能而深受用戶喜愛。然而&#xff0c;隨著“EasyRecovery2024 crack”關鍵詞的流行&#xff0c;我們不得不面對…

電子電氣架構 —— 刷寫模式:并行刷寫

電子電氣架構 —— 刷寫模式:并行刷寫 我是穿拖鞋的漢子,魔都中堅持長期主義的工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 人們會在生活中不斷攻擊你。他們的主要武器是向你灌輸對自己的懷疑:你的價值、你的能力、你的潛力。他們往往會將此…

【深度學習入門篇一】阿里云服務器(不需要配環境直接上手跟學代碼)

前言 博主剛剛開始學深度學習&#xff0c;配環境配的心力交瘁&#xff0c;一塌糊涂&#xff0c;不想配環境的剛入門的同伴們可以直接選擇阿里云服務器 阿里云天池實驗室&#xff0c;在入門階段跑個小項目完全沒有問題&#xff0c;不要自己傻傻的在那配環境配了半天還不匹配&a…