边走、边悟迟早会好 |
可以直接在SQL查询中使用MyBatis的
示例:
在Mapper接口中,传入一个prefix参数,用来添加前缀:
public interface ImgInfoMapper extends BaseMapper {
List selectListByImgTypeAndId(@Param("imgType") ImgType imgType,
@Param("workId") Long workId,
@Param("prefix") String prefix);
}
使用时传入你想要的前缀:
List imgUrlList = imgInfoMapper.selectListByImgTypeAndId(ImgType.SMALL, id, properties.getEndpoint());
可以在Java代码中调用查询方法后,对返回的结果进行前缀添加处理。
示例:
List imgUrlList = imgInfoMapper.selectListByImgTypeAndId(ImgType.SMALL, id);String prefix = properties.getEndpoint();
imgUrlList = imgUrlList.stream()
.map(url -> url.startsWith("http") ? url : prefix + url)
.collect(Collectors.toList());
自定义的JsonSerializer来处理图片URL的拼接,增加了灵活性和可配置性。
关键点:
自动拼接域名:通过properties.getEndpoint()从配置文件中获取Minio接口域名,然后根据条件决定是否拼接域名
处理多个图片URL:代码处理了可能包含多个图片URL的情况(以逗号分隔),并且确保了每个URL都得到正确处理
条件判断:对于已经是完整HTTP URL的图片,不会重复拼接域名,而是直接使用原有的URL
细节优化建议:
空值检查:StrUtil.isBlank(value) 和 StrUtil.isBlank(properties.getEndpoint()) 的检查确保了在处理空值时不会出现异常
正则匹配:通过ReUtil.isMatch(PatternPool.URL_HTTP, img)判断是否为完整URL,避免重复拼接
package com.echo.common.ImgJson;
import cn.hutool.core.lang.PatternPool;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import com.echo.common.minio.MinioProperties;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
public class ImgJsonSerializer extends JsonSerializer {
@Autowired
private MinioProperties properties;
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (StrUtil.isBlank(value)) {
gen.writeString(StrUtil.EMPTY);
return;
} else if (StrUtil.isBlank(properties.getEndpoint())) {
gen.writeString(value);
return;
}
String[] imgs = value.split(StrUtil.COMMA);
StringBuilder sb = new StringBuilder();
for (String img : imgs) {
if (ReUtil.isMatch(PatternPool.URL_HTTP, img)) {
sb.append(img).append(StrUtil.COMMA);
} else {
sb.append(properties.getEndpoint()).append(img).append(StrUtil.COMMA);
}
}
sb.deleteCharAt(sb.length() - 1);
gen.writeString(sb.toString());
}
}
使用了 hutool依赖,需引入
@Schema(description = "图片地址")
@JsonSerialize(using = ImgJsonSerializer.class)
private String imgUrl;
返回参数自动拼接图片前缀地址web项目图片地址统一前缀处理
感谢支持 听忆.-CSDN博客
众口难调从心就好 |