Java | 图片地址查询返回参数自动拼接图片前缀地址

边走、边悟迟早会好

一、 在数据库查询时处理(推荐)

可以直接在SQL查询中使用MyBatis的标签来判断URL是否完整,如果不完整就加上前缀
示例:



在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代码中处理


可以在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拼接


自定义的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博客

众口难调从心就好

你可能感兴趣的:(日常开发,java,开发语言)