mirror of
https://gitee.com/gz-yami/mall4j.git
synced 2026-10-06 14:13:10 +08:00
图片序列化处理错误修复
This commit is contained in:
+33
-13
@@ -14,13 +14,10 @@ import cn.hutool.core.util.StrUtil;
|
||||
import tools.jackson.core.JsonGenerator;
|
||||
import com.yami.shop.common.bean.Qiniu;
|
||||
import com.yami.shop.common.util.ImgUploadUtil;
|
||||
import com.yami.shop.common.util.SpringContextUtils;
|
||||
import tools.jackson.databind.SerializationContext;
|
||||
import tools.jackson.databind.ValueSerializer;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Objects;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
@@ -28,40 +25,63 @@ import java.util.regex.Pattern;
|
||||
/**
|
||||
* @author lanhai
|
||||
*/
|
||||
@Component
|
||||
public class ImgJsonSerializer extends ValueSerializer<String> {
|
||||
|
||||
@Autowired
|
||||
private Qiniu qiniu;
|
||||
@Autowired
|
||||
|
||||
private ImgUploadUtil imgUploadUtil;
|
||||
|
||||
@Override
|
||||
public void serialize(String value, JsonGenerator gen, SerializationContext serializers) {
|
||||
// 如果图片字段为空,则直接按空串返回,避免后续拼接逻辑继续处理。
|
||||
if (StrUtil.isBlank(value)) {
|
||||
gen.writeString(StrUtil.EMPTY);
|
||||
return;
|
||||
}
|
||||
|
||||
// Jackson 3 升级后,该序列化器可能由 Jackson 直接实例化,因此这里要主动兜底获取 Spring Bean。
|
||||
initBeansIfNecessary();
|
||||
|
||||
String[] imgs = value.split(StrUtil.COMMA);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String resourceUrl = "";
|
||||
String rule="^((http[s]{0,1})://)";
|
||||
Pattern pattern= Pattern.compile(rule);
|
||||
String rule = "^((http[s]{0,1})://)";
|
||||
Pattern pattern = Pattern.compile(rule);
|
||||
|
||||
// 根据当前图片上传方式,决定返回七牛云地址还是本地资源前缀。
|
||||
if (Objects.equals(imgUploadUtil.getUploadType(), 2)) {
|
||||
resourceUrl = qiniu.getResourcesUrl();
|
||||
} else if (Objects.equals(imgUploadUtil.getUploadType(), 1)) {
|
||||
resourceUrl = imgUploadUtil.getResourceUrl();
|
||||
}
|
||||
|
||||
// 逐个处理逗号分隔的图片路径,已经是完整 http/https 地址的就原样返回。
|
||||
for (String img : imgs) {
|
||||
Matcher matcher = pattern.matcher(img);
|
||||
//若图片以http或https开头,直接返回
|
||||
if (matcher.find()){
|
||||
// 若图片以 http 或 https 开头,说明已经是完整地址,不再重复拼接资源前缀。
|
||||
if (matcher.find()) {
|
||||
sb.append(img).append(StrUtil.COMMA);
|
||||
}else {
|
||||
} else {
|
||||
sb.append(resourceUrl).append(img).append(StrUtil.COMMA);
|
||||
}
|
||||
}
|
||||
sb.deleteCharAt(sb.length()-1);
|
||||
|
||||
// 删除最后一个逗号,保证返回给前端的是合法的逗号分隔图片串。
|
||||
sb.deleteCharAt(sb.length() - 1);
|
||||
gen.writeString(sb.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化序列化器依赖
|
||||
*/
|
||||
private void initBeansIfNecessary() {
|
||||
// 只有在依赖未初始化时才从 Spring 容器中获取,避免每次序列化都重复查找 Bean。
|
||||
if (imgUploadUtil == null) {
|
||||
imgUploadUtil = SpringContextUtils.getBean("imgUploadUtil", ImgUploadUtil.class);
|
||||
}
|
||||
// 七牛云配置只在上传方式为云存储时会用到,这里统一懒加载,保持逻辑简单稳定。
|
||||
if (qiniu == null) {
|
||||
qiniu = SpringContextUtils.getBean("qiniu", Qiniu.class);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user