Java | 圖片地址查詢返回引數自動拼接圖片字首地址

槑孒發表於2024-08-10

程式碼介紹

自定義的JsonSerializer來處理圖片URL的拼接,增加了靈活性和可配置性。

關鍵點:

  1. 自動拼接域名:透過properties.getEndpoint()從配置檔案中獲取Minio介面域名,然後根據條件決定是否拼接域名。
  2. 處理多個圖片URL:程式碼處理了可能包含多個圖片URL的情況(以逗號分隔),並且確保了每個URL都得到正確處理。
  3. 條件判斷:對於已經是完整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專案圖片地址統一字首處理

相關文章