杰克逊没有用has
getter方法处理我的布尔字段。例如animal.hasLegs()
,legs
字段返回没有legs
字段的JSON对象。它适用于is
getter方法(person.isAwesome()
用于布尔字段awesome
)。
如何让Jackson使用布尔字段的has
方法命名约定?
答案 0 :(得分:3)
使用hasXXX()
注释所有必需的@JsonGetter
方法。否则杰克逊根本就不会使用这个属性,因为它不是以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);
}
});