如何使用 Jackson 的布尔值的“has”方法命名约定?

Jel*_*lle 3 java json jackson

Jackson 不使用hasgetter 方法处理我的布尔字段。例如animal.hasLegs(),对于legs字段返回一个不带该legs字段的 JSON 对象。它确实可以与 getter 方法一起使用isperson.isAwesome()对于布尔字段awesome)。

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

Evg*_*kov 5

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

    @JsonGetter
    public boolean hasAwesome() { ... }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 设置 custom PropertyNamingStrategy,它将映射从方法名称重命名为 JSON 字段。默认情况下,它将生成名为 的 JSON 字段hasXXX

    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);
        }
    });
    
    Run Code Online (Sandbox Code Playgroud)