java - 如何将 'has' 方法命名约定用于 Jackson 的 boolean 值?

标签 java json jackson

Jackson 不使用 has getter 方法处理我的 boolean 字段。例如animal.hasLegs(),对于legs字段返回一个没有legs字段的JSON对象。它确实适用于 is getter 方法(person.isAwesome() 用于 boolean 字段 awesome)。

如何让 Jackson 对 boolean 字段使用 has 方法命名约定?

最佳答案

  1. @JsonGetter 注释所有需要的hasXXX() 方法。否则 Jackson 根本不使用这个属性,因为它不是以 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);
        }
    });
    

关于java - 如何将 'has' 方法命名约定用于 Jackson 的 boolean 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42579672/

相关文章:

java - 如何在没有事件监听器的情况下检查数据是否仅存在于 firebase 数据库中一次

java - Jackson 多态序列化生成不正确的类名

java - 如何获取 Jackson 认为的类的属性列表?

python - 在python beautifulsoup中从html中提取json

java - 数组上的 JAXB JSON 强制括号

java - 在 Jackson 和 @XmlValue 中序列化对象

java - 线程中的异常 "main"org.hibernate.TransactionException : nested transactions not supported

java - Spring MVC : How to modify @Pathvariable(URI) in Interceptor before going to controller?

java - 当基本对象列表时,GSON 不包括鉴别器字段

javascript - AngularJS:从 php 脚本获取 JSON