我們正在探索 Spring Boot 1.5 中的 Micrometer 指標(biāo)收集庫(kù)。Micrometer 在Tag界面中提供了一個(gè)靜態(tài)方法來(lái)為指標(biāo)創(chuàng)建標(biāo)簽。public interface Tag { String getKey(); String getValue(); static Tag of(String key, String value) { return new ImmutableTag(key, value); }}ImmutableTag 的實(shí)現(xiàn)如下:public class ImmutableTag implements Tag { private String key; private String value; public ImmutableTag(String key, String value) { requireNonNull(key); requireNonNull(value); this.key = key; this.value = value; }...other methods...}現(xiàn)在,我們正在以編程方式收集一些標(biāo)簽,最終可能會(huì)得到一個(gè)空標(biāo)簽(由于 會(huì)引發(fā)異常requireNonNull())。但是在遇到空值時(shí),我們可以用默認(rèn)字符串(例如“未知”)替換標(biāo)記值。處理這個(gè)問(wèn)題的最佳方法是什么?我想到了以下幾點(diǎn):Try / Catch:將所有此類語(yǔ)句括在一個(gè)try/catch塊中。我知道這可能很昂貴且難以維護(hù)。在我們的末尾處理 null: Check for any null tag being passed,并將其替換為默認(rèn)字符串。但是,我們會(huì)有很多這樣的語(yǔ)句,并且希望有一些默認(rèn)情況下會(huì)發(fā)生這種情況的配置。Wrapper接口:創(chuàng)建一個(gè)TagWrapper interface,用默認(rèn)值替換null,調(diào)用Tag.of()方法?,F(xiàn)在對(duì)我來(lái)說(shuō)似乎是最好的選擇,但是,當(dāng)不再需要它時(shí)(也許稍后會(huì)在庫(kù)中引入這樣的方法),擺脫包裝器將包括很多更改。Spring 中是否有一些配置允許我在不創(chuàng)建包裝器的情況下預(yù)先處理第三方庫(kù)方法?
3 回答

侃侃無(wú)極
TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
也許使用 Spring AOP。就像是:
@around(value="execution(* package.name.class.Tag.of)")
public void wrapTags(ProceedingJoinPoint call){
try {
Object[] args = call.getArgs();
// wrap args in Optional.ofNullable
call.proceed();
} catch (Exception e){
// handle exception
}
}

暮色呼如
TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
我可能遺漏了一些東西,但是您不能將值包裝在傳遞給Tag接口的 Optional 中嗎?
// wrapping values in Optional
public static String wrapTags(String s){
return Optional.ofNullable(s).orElse("UNKNOWN");
}
添加回答
舉報(bào)
0/150
提交
取消