2
傑克遜不會用has
getter方法處理我的布爾型字段。例如animal.hasLegs()
,對於legs
字段返回的JSON對象沒有legs
字段。它可以與is
獲取方法(person.isAwesome()
,布爾字段awesome
)一起使用。如何使用Jackson的布爾值命名約定?
我該如何讓傑克遜使用布爾型字段的has
方法命名約定?
傑克遜不會用has
getter方法處理我的布爾型字段。例如animal.hasLegs()
,對於legs
字段返回的JSON對象沒有legs
字段。它可以與is
獲取方法(person.isAwesome()
,布爾字段awesome
)一起使用。如何使用Jackson的布爾值命名約定?
我該如何讓傑克遜使用布爾型字段的has
方法命名約定?
標註所有需要與@JsonGetter
hasXXX()
方法。否則,傑克遜並沒有在所有使用該屬性,因爲它不與get
開始:
@JsonGetter
public boolean hasAwesome() { ... }
設置自定義PropertyNamingStrategy
,其重命名從方法名稱映射到JSON場。默認情況下,它將生成名爲hasXXX
的JSON字段。
ObjectMapper mapper = ...
mapper.setPropertyNamingStrategy(new PropertyNamingStrategy() {
@Override
public String nameForGetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName) {
String prefix = "has";
if (defaultName.startsWith(prefix)) {
String withoutHas = defaultName.replace(prefix, "");
char firstLower = Character.toLowerCase(withoutHas.charAt(0));
return firstLower + withoutHas.substring(1);
}
return super.nameForGetterMethod(config, method, defaultName);
}
});
注:沒有 「有」 命名約定。在JavaBean規範中定義了「is」約定(儘管這是一個例外),所以爲具有「has」,「can」,「should」或任何其他類似前綴的布爾變量的獲取器必然會破壞許多應用程序。儘管如此,沒有什麼能夠阻止你創建額外的getter – Kayaman
@Kayaman雖然它可能不是官方的,但使用'has'命名很常見。例如,看看這個SO問題:http://stackoverflow.com/questions/3874350/naming-conventions-for-java-methods-that-return-booleanno-question-mark – Jelle
它仍然沒有在規範中。如果它在規格中,它會自動工作。 – Kayaman