zhentao hace 1 mes
padre
commit
11907145e6

+ 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>

+ 84 - 0
src/main/java/com/zhentao/Demo0330Application.java

@@ -1,13 +1,97 @@
 package com.zhentao;
 
+import cn.hutool.crypto.digest.DigestUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.zhentao.controller.GoodsController;
+import com.zhentao.dto.Sign;
+import com.zhentao.pojo.AppRequest;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
 @SpringBootApplication
 public class Demo0330Application {
+    private static final String APP_KEY="your_app_key";
+    private static final String BASE_URL="http://localhost:8000/api";
 
     public static void main(String[] args) {
         SpringApplication.run(Demo0330Application.class, args);
+        //生成签名
+        diaoyong();
+    }
+    private static String generateSign(Sign sign) {
+        String signStr = sign.getAppId()+sign.getGoodsId()+sign.getReqId()+sign.getReqTime()+sign.getAppKey();
+        return DigestUtil.md5Hex(signStr);
+    }
+    public static void diaoyong(){
+        String appId="123456";
+        String goodsId="7890";
+        String reqId="1111";
+        Long reqTime=System.currentTimeMillis();
+        int amount = 1;
+        double price = 100.0;
+        String mobile = "15922002630";
+        Sign sign1=new Sign(appId,goodsId,reqId,reqTime,APP_KEY);
+        //生成签名
+        String sign = generateSign(sign1);
+        //填充请求参数
+        AppRequest request=new AppRequest();
+        request.setAppId(appId);
+        request.setSign(sign);
+        request.setGoodsID(goodsId);
+        request.setReqTime(reqTime);
+        request.setAmount(amount);
+        request.setPrice(price);
+        request.setMobile(mobile);
+        request.setNowDate(reqTime);
+
+        //调用接口一
+        callJsonApi(reqId,request);
+        //调用接口二
+        callFormApi(reqId,request);
+    }
+    private static void callJsonApi(String reqId, AppRequest request) {
+        try {
+            ObjectMapper objectMapper = new ObjectMapper();
+            String jsonBody = objectMapper.writeValueAsString(request);
+
+            HttpResponse response = HttpRequest.post(BASE_URL + "/goods/json")
+                    .header("reqId", reqId)
+                    .body(jsonBody)
+                    .execute();
+
+            System.err.println("JSON API Response: " + response.body());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void callFormApi(String reqId, AppRequest request) {
+        try {
+            Map<String, Object> formParams = new HashMap<>();
+            formParams.put("appId", request.getAppId());
+            formParams.put("sign", request.getSign());
+            formParams.put("reqTime", request.getReqTime());
+            formParams.put("goodsID", request.getGoodsID());
+            formParams.put("amount", request.getAmount());
+            formParams.put("price", request.getPrice());
+            formParams.put("mobile", request.getMobile());
+            formParams.put("nowDate", request.getNowDate());
+
+            HttpResponse response = HttpRequest.get(BASE_URL + "/goods/form")
+                    .header("reqId", reqId)
+                    .form(formParams)
+                    .execute();
+
+            System.err.println("Form API Response: " + response.body());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 
 }

+ 47 - 0
src/main/java/com/zhentao/controller/GoodsController.java

@@ -0,0 +1,47 @@
+package com.zhentao.controller;
+
+import com.zhentao.pojo.AppRequest;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api")
+@Validated
+public class GoodsController {
+    @PostMapping("/goods/json")
+    public ResponseEntity<Map<String,Object>> createGoodsJson(@RequestHeader("reqId") String reqId, @Valid @RequestBody AppRequest appRequest, BindingResult bindingResult){
+        Map<String,Object> map=new HashMap<>();
+        map.put("reqId",reqId);
+        if (bindingResult.hasErrors()){
+            map.put("status","error");
+            map.put("message",bindingResult.getAllErrors().get(0).getDefaultMessage());
+            return new ResponseEntity<>(map, HttpStatus.BAD_REQUEST);
+        }
+        map.put("status","success");
+        map.put("data",appRequest);
+        return new ResponseEntity<>(map,HttpStatus.OK);
+    }
+    @GetMapping("/goods/form")
+    public ResponseEntity<Map<String,Object>> createGoodsForm(@RequestHeader("reqId") String reqId, @Valid AppRequest appRequest, BindingResult bindingResult){
+        Map<String, Object> response = new HashMap<>();
+        response.put("reqId", reqId);
+
+        if (bindingResult.hasErrors()) {
+            response.put("status", "error");
+            response.put("message", bindingResult.getAllErrors().get(0).getDefaultMessage());
+            return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST);
+        }
+
+        response.put("status", "success");
+        response.put("data", appRequest);
+        return new ResponseEntity<>(response, HttpStatus.OK);
+    }
+
+}

+ 0 - 36
src/main/java/com/zhentao/controller/InterfaceCaller.java

@@ -1,36 +0,0 @@
-package com.zhentao.controller;
-
-import cn.hutool.crypto.digest.DigestUtil;
-
-public class InterfaceCaller {
-    //模拟接口一
-    public static boolean verifySignature1(String appId,String goodsId,String reqId,String reqTime,String appKey,String signature) {
-        String dataToSign=appId+goodsId+reqId+reqTime+appKey;
-        String generatedSignature= DigestUtil.md5Hex(dataToSign);
-        return generatedSignature.equals(signature);
-    }
-    //模拟接口二
-    public static boolean verifySignature2(String appId,String goodsId,String reqId,String reqTime,String appKey,String signature) {
-        String dataToSign=appId+goodsId+reqId+reqTime+appKey;
-        String generatedSignature=  DigestUtil.md5Hex(dataToSign);
-        return generatedSignature.equals(signature);
-    }
-
-    public static void main(String[] args) {
-        String appId="123456";
-        String goodsId="7890";
-        String reqId="1111";
-        String reqTime="2025-03-31 12:00:00";
-        String appKey="abcdef";
-        //生成签名
-        String dataToSign=appId+goodsId+reqId+reqTime+appKey;
-        String signature=DigestUtil.md5Hex(dataToSign);
-        System.out.println(signature);
-        //调用接口一进行验签
-        boolean result1 = InterfaceCaller.verifySignature1(appId, goodsId, reqId, reqTime, appKey, signature);
-        System.err.println("接口一验签结果:"+result1);
-        //调用接口一进行验签
-        boolean result2 = InterfaceCaller.verifySignature2(appId, goodsId, reqId, reqTime, appKey, signature);
-        System.err.println("接口二验签结果:"+result2);
-    }
-}

+ 16 - 0
src/main/java/com/zhentao/dto/Sign.java

@@ -0,0 +1,16 @@
+package com.zhentao.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Sign {
+    private String appId;
+    private String goodsId;
+    private String reqId;
+    private Long reqTime;
+    private String appKey;
+}

+ 7 - 8
src/main/java/com/zhentao/pojo/AppRequest.java

@@ -10,15 +10,14 @@ import java.util.Date;
 
 @Data
 public class AppRequest {
-    @NotEmpty(message = "id不能为空")
+    @NotBlank(message = "id不能为空")
     private String appId;
-    @NotEmpty(message = "签名不能为空")
+    @NotBlank(message = "签名不能为空")
     private String sign;
     @NotNull(message = "reqTime不能为空")
-    @JsonSerialize(using = ToStringSerializer.class)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8",shape = JsonFormat.Shape.STRING)
     private Long reqTime;
-    @NotEmpty(message = "goodsId不能为空")
-    @JsonFormat(shape =JsonFormat.Shape.STRING)
+    @NotBlank(message = "goodsId不能为空")
     private String goodsID;
     @NotNull(message = "amount不能为空")
     @DecimalMin(value = "1",message = "最小值1")
@@ -27,10 +26,10 @@ public class AppRequest {
     @DecimalMin(value = "0",message = "最小值0")
     @DecimalMax(value = "9999",message = "最大值9999")
     private Double price;
-    @NotEmpty(message = "手机号不能为空")
-    @Pattern(regexp="^((13[0-9)|(14[0-9])|(15(10-9])|(166)|(17[0-9])|(18[0-9])|(19[0-9]))\\d{8}$",message ="手机号码格式错误")
+    @NotBlank(message = "手机号不能为空")
+    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
     private String mobile;
     @NotNull(message = "日期不能为空")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8",shape = JsonFormat.Shape.STRING)
-    private Date nowDate;
+    private Long nowDate;
 }

+ 4 - 0
src/main/resources/application.yml

@@ -0,0 +1,4 @@
+server:
+  port: 8000
+test : 01
+

BIN
target/classes/com/zhentao/Demo0330Application.class


BIN
target/classes/com/zhentao/pojo/AppRequest.class