纵静芸 1 mese fa
commit
bea2410dcf

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+# 项目排除路径
+/target/

+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml

+ 18 - 0
.idea/compiler.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <profile name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+        <module name="SpringBoot02" />
+      </profile>
+    </annotationProcessing>
+  </component>
+  <component name="JavacSettings">
+    <option name="ADDITIONAL_OPTIONS_OVERRIDE">
+      <module name="SpringBoot02" options="-parameters" />
+    </option>
+  </component>
+</project>

+ 7 - 0
.idea/encodings.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
+  </component>
+</project>

+ 20 - 0
.idea/jarRepositories.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+  </component>
+</project>

+ 14 - 0
.idea/misc.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/pom.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>

+ 124 - 0
.idea/uiDesigner.xml

@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 219 - 0
pom.xml

@@ -0,0 +1,219 @@
+<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>
+
+  <groupId>com.zhentao</groupId>
+  <artifactId>SpringBoot02</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>jar</packaging>
+
+  <name>SpringBoot02</name>
+  <url>http://maven.apache.org</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    <spring-boot.version>2.6.13</spring-boot.version>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <parent>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-parent</artifactId>
+    <version>2.3.2.RELEASE</version>
+    <relativePath/>
+  </parent>
+  <!--引入项目的依赖-->
+  <dependencies>
+
+
+<!--    <dependency>-->
+<!--      <groupId>com.alibaba.cloud</groupId>-->
+<!--      <artifactId>spring-cloud-alibaba-dependencies</artifactId>-->
+<!--      <version>2.2.5.RELEASE</version>-->
+<!--      <type>pom</type>-->
+<!--      <scope>import</scope>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.springframework.cloud</groupId>-->
+<!--      <artifactId>spring-cloud-dependencies</artifactId>-->
+<!--      <version>Hoxton.SR8</version>-->
+<!--      <type>pom</type>-->
+<!--      <scope>import</scope>-->
+<!--    </dependency>-->
+
+
+
+<!--    <dependency>-->
+<!--      <groupId>org.springframework.boot</groupId>-->
+<!--      <artifactId>spring-boot-starter-test</artifactId>-->
+<!--      <scope>test</scope>-->
+<!--    </dependency>-->
+<!--    &lt;!&ndash;        <dependency>&ndash;&gt;-->
+<!--    &lt;!&ndash;            <groupId>org.springframework.boot</groupId>&ndash;&gt;-->
+<!--    &lt;!&ndash;            <artifactId>spring-boot-starter-web</artifactId>&ndash;&gt;-->
+<!--    &lt;!&ndash;        </dependency>&ndash;&gt;-->
+<!--    <dependency>-->
+<!--      <groupId>org.springframework.boot</groupId>-->
+<!--      <artifactId>spring-boot-configuration-processor</artifactId>-->
+<!--      <optional>true</optional>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.junit.jupiter</groupId>-->
+<!--      <artifactId>junit-jupiter-api</artifactId>-->
+<!--      <version>5.7.1</version>-->
+<!--      <scope>compile</scope>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.projectlombok</groupId>-->
+<!--      <artifactId>lombok</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>com.alibaba.fastjson2</groupId>-->
+<!--      <artifactId>fastjson2</artifactId>-->
+<!--      <version>2.0.39</version>-->
+<!--    </dependency>-->
+
+
+
+<!--    <dependency>-->
+<!--      <groupId>org.springframework.boot</groupId>-->
+<!--      <artifactId>spring-boot-starter-web</artifactId>-->
+<!--    </dependency>-->
+<!--    &lt;!&ndash;        mybatis-plus依赖&ndash;&gt;-->
+<!--    <dependency>-->
+<!--      <groupId>com.baomidou</groupId>-->
+<!--      <artifactId>mybatis-plus-boot-starter</artifactId>-->
+<!--      <version>3.5.4</version>-->
+<!--    </dependency>-->
+<!--    &lt;!&ndash;        mysql依赖&ndash;&gt;-->
+<!--    <dependency>-->
+<!--      <groupId>mysql</groupId>-->
+<!--      <artifactId>mysql-connector-java</artifactId>-->
+<!--    </dependency>-->
+<!--    &lt;!&ndash;        lombok依赖&ndash;&gt;-->
+<!--    <dependency>-->
+<!--      <groupId>org.projectlombok</groupId>-->
+<!--      <artifactId>lombok</artifactId>-->
+<!--    </dependency>-->
+<!--    &lt;!&ndash;        服务的注册场景与发现依赖&ndash;&gt;-->
+<!--    <dependency>-->
+<!--      <groupId>com.alibaba.cloud</groupId>-->
+<!--      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
+<!--      <version>2.2.5.RELEASE</version>-->
+<!--    </dependency>-->
+<!--    &lt;!&ndash;       配置服务注册中心依赖&ndash;&gt;-->
+<!--    <dependency>-->
+<!--      <groupId>com.alibaba.cloud</groupId>-->
+<!--      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
+<!--      <version>2.2.5.RELEASE</version>-->
+<!--    </dependency>-->
+
+
+
+<!--    &lt;!&ndash; 如果使用 Spring Boot Starter Validation &ndash;&gt;-->
+<!--    <dependency>-->
+<!--      <groupId>org.springframework.boot</groupId>-->
+<!--      <artifactId>spring-boot-starter-validation</artifactId>-->
+<!--    </dependency>-->
+
+<!--    &lt;!&ndash; 或者单独添加 Bean Validation API 和实现 &ndash;&gt;-->
+<!--    <dependency>-->
+<!--      <groupId>javax.validation</groupId>-->
+<!--      <artifactId>validation-api</artifactId>-->
+<!--      <version>2.0.1.Final</version>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.hibernate.validator</groupId>-->
+<!--      <artifactId>hibernate-validator</artifactId>-->
+<!--      <version>6.2.0.Final</version>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.hibernate.validator</groupId>-->
+<!--      <artifactId>hibernate-validator-annotation-processor</artifactId>-->
+<!--      <version>6.2.0.Final</version>-->
+<!--    </dependency>-->
+
+
+
+<!--  </dependencies>-->
+<!--    <dependency>-->
+<!--      <groupId>cn.hutool</groupId>-->
+<!--      <artifactId>hutool-all</artifactId>-->
+<!--      <version>5.8.11</version> &lt;!&ndash; 请根据需要选择最新版本 &ndash;&gt;-->
+<!--    </dependency>-->
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-validation</artifactId>
+      <version>2.5.15</version> <!-- 使用您需要的Spring Boot版本 -->
+    </dependency>
+    <dependency>
+      <groupId>cn.hutool</groupId>
+      <artifactId>hutool-all</artifactId>
+      <version>5.8.18</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-web</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.projectlombok</groupId>
+      <artifactId>lombok</artifactId>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-test</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-dependencies</artifactId>
+        <version>${spring-boot.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-maven-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.11.0</version>
+        <configuration>
+          <source>1.8</source>
+          <target>1.8</target>
+          <encoding>UTF-8</encoding>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-maven-plugin</artifactId>
+        <version>${spring-boot.version}</version>
+        <configuration>
+          <mainClass>com.zhentao.App</mainClass>
+        </configuration>
+        <executions>
+          <execution>
+            <id>repackage</id>
+            <goals>
+              <goal>repackage</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+
+</project>

+ 13 - 0
src/main/java/com/zhentao/App.java

@@ -0,0 +1,13 @@
+package com.zhentao;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void main( String[] args )
+    {
+        System.out.println( "Hello World!" );
+    }
+}

+ 24 - 0
src/main/java/com/zhentao/controller/ApiController.java

@@ -0,0 +1,24 @@
+package com.zhentao.controller;
+
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api")
+public class ApiController {
+
+//    @PostMapping("/endpoint1")
+//    public ResponseEntity<Object> endpoint1(@RequestHeader("reqId")String reqId, @Valid @RequestBody RequestParam params, BindingResult bindingResult){
+//        if (bindingResult.hasErrors()){
+//            Map<String,String> errors=new HashMap<>();
+//            bindingResult.getFieldError().forEach
+//        }
+//
+//    }
+
+}

+ 28 - 0
src/main/java/com/zhentao/controller/HutoolsController.java

@@ -0,0 +1,28 @@
+package com.zhentao.controller;
+
+import cn.hutool.crypto.digest.DigestUtil;
+import org.springframework.util.DigestUtils;
+
+public class HutoolsController {
+    public static boolean callInterface1(String appId,String goodsId,String reqId,String reqTime,String appKey){
+        String signature = genreateSignature(appId, goodsId, reqId, reqTime, appKey);
+        return verifySignature(appId, goodsId, reqId, reqTime, appKey, signature);
+    }
+
+    public static boolean callInterface2(String appId,String goodsId,String reqId,String reqTime,String appKey){
+        String signature = genreateSignature(appId, goodsId, reqId, reqTime, appKey);
+        return verifySignature(appId, goodsId, reqId, reqTime, appKey, signature);
+    }
+
+    public static String genreateSignature(String appId,String goodsId,String reqId,String reqTime,String appKey){
+      String source=  appId+goodsId+reqId+reqTime+appKey;
+        return DigestUtil.md5Hex(source);
+    }
+
+    public static boolean verifySignature(String appId,String goodsId,String reqId,String reqTime,String appKey,String signature){
+        String genreateSignature = genreateSignature(appId, goodsId, reqId, reqTime, appKey);
+        return genreateSignature.equals(signature);
+    }
+
+
+}

+ 23 - 0
src/main/java/com/zhentao/controller/InterfaceSignatureDemo.java

@@ -0,0 +1,23 @@
+package com.zhentao.controller;
+
+import com.zhentao.controller.HutoolsController;
+
+public class InterfaceSignatureDemo {
+    public static void main(String[] args) {
+//        示例参数
+        String appId="123456";
+        String goodsId="7890";
+        String reqId="1111";
+        String reqTime="2025012055520963";
+        String appKey="abcdefg";
+
+//调用接口一
+        boolean result1 = HutoolsController.callInterface1(appId, goodsId, reqId, reqTime, appKey);
+        System.out.println("接口一调用结果:"+(result1?"签名验证通过":"签名验证失败"));
+
+//调用接口二
+        boolean result2 = HutoolsController.callInterface2(appId, goodsId, reqId, reqTime, appKey);
+        System.out.println("接口二调用结果:"+(result2?"签名验证通过":"签名验证失败"));
+    }
+
+}

+ 47 - 0
src/main/java/com/zhentao/pojo/Params.java

@@ -0,0 +1,47 @@
+package com.zhentao.pojo;
+
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+
+import javax.validation.constraints.*;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+@Data
+public class Params implements Serializable {
+    @NotBlank(message = "应用不能为空")
+    private String appId;
+    @NotBlank(message = "签名不能为空")
+    private String sign;
+    @NotNull(message = "时间戳不能为空")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long reqTime;
+
+    @NotNull(message = "goodsId不能为空")
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long goodsId;
+
+    @NotNull(message = "数量不能为空")
+    @DecimalMin(value = "1",message = "最小值1")
+    private Integer amount;
+
+    @DecimalMin(value = "0",message = "最小值0")
+    @DecimalMax(value = "9999",message = "最大值9999")
+    private BigDecimal price;
+
+    @NotBlank(message = "手机号不能为空")
+    @Pattern(regexp = "^((13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\\d{8}$",message = "手机号码格式错误")
+
+
+    private String mobile;
+    @NotNull(message = "日期不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8",shape = JsonFormat.Shape.STRING)
+    private Date newDate;
+
+
+
+}

+ 53 - 0
src/main/java/com/zhentao/suanfa/Test01.java

@@ -0,0 +1,53 @@
+package com.zhentao.suanfa;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Test01 {
+    public String min(String s,String t){
+        if (s==null||t==null||s.length()<t.length()){
+            return "";
+        }
+
+        Map<Character, Integer> targetMap = new HashMap<>();
+        for (char c : t.toCharArray()) {
+            targetMap.put(c, targetMap.getOrDefault(c, 0)+1);
+        }
+        int required = targetMap.size();
+        int left=0,right=0;
+        int formed=0;
+        Map<Character, Integer> windowMap = new HashMap<>();
+        int minLen = Integer.MAX_VALUE;
+        int minLeft=0;
+
+        while (right<s.length()){
+            char c = s.charAt(right);
+            windowMap.put(c, windowMap.getOrDefault(c, 0)+1);
+            if (targetMap.containsKey(c)&&windowMap.get(c).intValue()==targetMap.get(c).intValue()){
+                formed++;
+            }
+
+            while (left<=right&&formed==required){
+                 c = s.charAt(left);
+                if (right-left+1<minLen){
+                    minLen = right - left + 1;
+                    minLeft = left;
+                }
+
+                windowMap.put(c, windowMap.get(c)-1);
+                if (targetMap.containsKey(c)&&windowMap.get(c).intValue()<targetMap.get(c).intValue()){
+                    formed--;
+                }
+                left++;
+            }
+            right++;
+        }
+        return minLen==Integer.MAX_VALUE?"":s.substring(minLeft,minLeft+minLen);
+    }
+    public static void main(String[] args) {
+        Test01 test01 = new Test01();
+        String s = "ADOBECODEBANC";
+        String t = "ABC";
+        System.out.println(test01.min(s, t));
+    }
+}

+ 31 - 0
src/main/java/com/zhentao/suanfa/Test02.java

@@ -0,0 +1,31 @@
+package com.zhentao.suanfa;
+
+import java.util.Deque;
+import java.util.LinkedList;
+
+public class Test02 {
+    public int[] max(int[] nums,int k){
+        if (nums==null||k<=0){
+            return new int[0];
+        }
+        int n = nums.length;
+        int [] result=new int[n-k+1];
+        int resultIndex=0;
+        //双端队列存储数组的索引
+        Deque<Integer> deque = new LinkedList<>();
+        for (int i = 0; i <n ; i++) {
+            while (!deque.isEmpty()&&deque.peek()<i-k+1){
+                deque.poll();
+            }
+
+            while (!deque.isEmpty()&&nums[deque.peekLast()]<nums[i]){
+                deque.pollLast();
+            }
+            deque.offer(i);
+            if (i>=k-1){
+                result[resultIndex++]=nums[deque.peek()];
+            }
+        }
+        return result;
+    }
+}

+ 13 - 0
src/main/java/com/zhentao/suanfa/TestNum02.java

@@ -0,0 +1,13 @@
+package com.zhentao.suanfa;
+
+public class TestNum02 {
+    public static void main(String[] args) {
+        Test02 test02 = new Test02();
+        int[] nums={1,3,-1,-3,5,3,6,7,};
+        int k=3;
+        int[] result = test02.max(nums, k);
+        for (int num : result) {
+            System.out.println(num+"");
+        }
+    }
+}