我怎样才能使用' has'与杰克逊布尔的方法命名约定?

时间:2017-03-03 13:05:44

标签: java json jackson

杰克逊没有用has getter方法处理我的布尔字段。例如animal.hasLegs()legs字段返回没有legs字段的JSON对象。它适用于is getter方法(person.isAwesome()用于布尔字段awesome)。

如何让Jackson使用布尔字段的has方法命名约定?

1 个答案:

答案 0 :(得分:3)

  1. 使用hasXXX()注释所有必需的@JsonGetter方法。否则杰克逊根本就不会使用这个属性,因为它不是以get开头的:

    @JsonGetter
    public boolean hasAwesome() { ... }
    
  2. 设置自定义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);
        }
    });