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