代码介绍
自定义的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<String> {
@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项目图片地址统一前缀处理