Quellcode durchsuchen

Fix: 修复字段类型转换报错、url格式校验

lwh vor 3 Tagen
Ursprung
Commit
c684eb3309

+ 16 - 5
pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java

@@ -201,20 +201,31 @@ public class GlobalBizExceptionHandler {
 		List<ObjectError> globalErrors = exception.getBindingResult().getGlobalErrors();
 		if (!globalErrors.isEmpty()) {
 			String errorMsg = globalErrors.get(0).getDefaultMessage();
-			log.warn("类级参数校验异常, ex = {}", errorMsg);
+			log.error("类级参数校验异常, ex = {}", errorMsg);
 			return R.failed(errorMsg);
 		}
 
 		// 处理字段级别的校验错误
 		List<FieldError> fieldErrors = exception.getBindingResult().getFieldErrors();
 		if (!fieldErrors.isEmpty()) {
-			String errorMsg = fieldErrors.get(0).getDefaultMessage();
-			log.warn("字段参数绑定异常, ex = {}", errorMsg);
-			return R.failed(errorMsg);
+			FieldError firstError = fieldErrors.get(0);
+			String fieldName = firstError.getField(); // 错误字段名
+			String errorCode = firstError.getCode();  // 错误代码(关键:区分错误类型)
+			String defaultMsg = firstError.getDefaultMessage(); // 注解中定义的message
+
+			// 1. 如果是类型转换错误(code为"typeMismatch")
+			if ("typeMismatch".equals(errorCode)) {
+				log.error("字段[{}]类型转换异常: {}", fieldName, defaultMsg);
+				return R.failed("参数类型错误:字段 [" + fieldName + "] 类型不匹配,请检查");
+			}
+
+			// 2. 普通校验错误(如@NotNull、@Size等,使用注解中定义的message)
+			log.error("字段[{}]校验异常: {}", fieldName, defaultMsg);
+			return R.failed(defaultMsg);
 		}
 
 		// 兜底错误信息
-		log.warn("参数校验异常,但未获取到具体错误信息");
+		log.error("参数校验异常,但未获取到具体错误信息");
 		return R.failed("参数校验失败");
 	}
 

+ 5 - 0
pig-marketing/pig-marketing-api/src/main/java/com/pig4cloud/pig/marketing/api/valid/DomainValidator.java

@@ -25,6 +25,11 @@ public class DomainValidator implements ConstraintValidator<DomainValidation, Ob
 		Long groupId = dto.getGroupId();
 		String domain = dto.getDomain();
 
+		if (sourceType == null){
+			setMessage(context, "来源类型不能为空");
+			return false;
+		}
+
 		// 来源类型为分组(1)时的校验
 		if (sourceType == 1) {
 			if (groupId == null) {

+ 5 - 0
pig-marketing/pig-marketing-api/src/main/java/com/pig4cloud/pig/marketing/api/valid/IPValidator.java

@@ -26,6 +26,11 @@ public class IPValidator implements ConstraintValidator<IPValidation, Object> {
 		String startIp = dto.getStartIp();
 		String endIp = dto.getEndIp();
 
+		if (sourceType == null){
+			setMessage(context, "来源类型不能为空");
+			return false;
+		}
+
 		// 来源类型为分组(1)时的校验
 		if (sourceType == 1) {
 			if (groupId == null) {

+ 5 - 1
pig-marketing/pig-marketing-api/src/main/java/com/pig4cloud/pig/marketing/api/vo/config/GetMarketingGlobalConfigVO.java

@@ -4,12 +4,12 @@ package com.pig4cloud.pig.marketing.api.vo.config;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Pattern;
 import jakarta.validation.constraints.Size;
 import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
-import java.math.BigDecimal;
 
 /**
  * @author: lwh
@@ -58,5 +58,9 @@ public class GetMarketingGlobalConfigVO implements Serializable {
 	@Schema(description = "跳转链接")
 	@NotBlank(message = "跳转链接不能为空")
 	@Size(max = 128, message = "跳转链接长度不能超过128")
+	@Pattern(
+			regexp = "^(http|https|ftp)://([\\w-]+\\.)+[\\w-]+(:\\d+)?(/[\\w-./?%&=]*)?$",
+			message = "跳转链接格式不正确,请输入有效的URL"
+	)
 	String url;
 }

+ 4 - 0
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/service/impl/MarketingDataServiceImpl.java

@@ -93,6 +93,10 @@ public class MarketingDataServiceImpl implements MarketingDataService {
 		result.setFingerprint(backend);
 		result.setCombine(fingerprint);
 
+		log.info("ip:{}---domain:{}", ip, domain);
+		log.info("前端指纹:{}", reqDto.getFingerprint());
+		log.info("后端指纹:{}", backend);
+		log.info("组合指纹:{}", fingerprint);
 		// 未匹配到应用,返回默认信息
 		if (marketingApps == null){
 			result.setUrl(getTriggeredUrl(ip, fingerprint,config.getUrl(), config.getTriggerNum()));