程式碼介紹
自定義的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專案圖片地址統一字首處理