【问题标题】:jsonschema2pojo generating objects of custom annotators as welljsonschema2pojo 也生成自定义注释器的对象
【发布时间】:2019-12-12 13:40:01
【问题描述】:

我正在使用 jsonschema2pojo maven 插件生成 pojo。使用自定义注释器,我包含了一些 lombok 注释(效果很好),但它也为注释创建变量。有没有办法强制 jsonschema2pojo 不为注解创建对象变量而只是有变量?

json 架构

{
  "title": "Person",
  "type": "object",
  "properties": {
    "lombok-builder": true,
    "lombok-data": true,
    "lombok-to-string": true,
    "name": {
      "type": "string"
    }
  }
}

自定义注释器

 @Override
    public void propertyField(JFieldVar field, JDefinedClass clazz, String property, JsonNode propertyNode) {
        super.propertyField(field, clazz, property, propertyNode);

        if (property.equals("lombok-builder")) {
            clazz.annotate(Builder.class);
        } else if (property.equals("lombok-data")) {
            clazz.annotate(Data.class);
        } else if (property.equals("lombok-to-string")) {
            clazz.annotate(ToString.class);
        }
}

jsonschema2pojo生成的Person.java


package com.package;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;


/**
 * Person
 * <p>
 * 
 * 
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@Builder
@Getter
@Setter
@Data
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@ToString
@JsonPropertyOrder({
    "lombok-builder",
    "lombok-getter",
    "lombok-setter",
    "lombok-data",
    "lombok-equals-and-hash-code",
    "lombok-no-args-constructor",
    "lombok-all-args-constructor",
    "lombok-to-string",
    "name"
})
public class Person {

    @JsonProperty("lombok-builder")
    public Object lombokBuilder;
    @JsonProperty("lombok-data")
    public Object lombokData;
    @JsonProperty("lombok-to-string")
    public Object lombokToString;
    @JsonProperty("name")
    public String name;

}

如您所见,注释工作正常,但我收到了public Object lombokToString;@JsonProperty("lombok-to-string") 等:|

【问题讨论】:

    标签: java annotations jsonschema pojo jsonschema2pojo


    【解决方案1】:

    经过一段时间的研究,我意识到我的做法是错误的。 需要在 propertyInclusionadditionalProperties 上工作 以下是任何有类似问题的人的工作注释器和示例架构。

    import com.sun.codemodel.JDefinedClass;
    import com.fasterxml.jackson.databind.JsonNode;
    import lombok.*;
    import org.jsonschema2pojo.AbstractAnnotator;
    
    public class LombokAnnotator extends AbstractAnnotator {
    
        @Override
        public void propertyInclusion(JDefinedClass clazz, JsonNode schema) {
    
            JsonNode additionalProperties = schema.get("additionalProperties");
    
            try {
                additionalProperties.fieldNames().forEachRemaining(property -> {
                    Class annotation = getAnnotation(property);
                    if (!annotation.equals(IllegalArgumentException.class)) {
                        clazz.annotate(annotation);
                    }
                });
            } catch (NullPointerException e) {
                System.out.println(String.format("No additionalProperties defined for %s.", clazz.fullName()));
            }
    
        }
    
        @Override
        public boolean isAdditionalPropertiesSupported() {
            return false;
        }
    
    

    并更新了 json 架构

    {
      "title": "Person",
      "type": "object",
      "additionalProperties": {
        "lombok-builder": true,
        "lombok-data": true,
        "lombok-getter": true,
        "lombok-setter": true,
        "lombok-equals-and-hash-code": true,
        "lombok-no-args-constructor": true,
        "lombok-all-args-constructor": true,
        "lombok-to-string": true
      },
      "properties": {
        "name": {
          "type": "string"
        }
      }
    }
    
    

    【讨论】:

    • 你能分享更多关于这是如何实现的吗?您显示的注释器类是否已添加到插件中?架构文件在哪里?
    • 您将自定义注释器放在哪里?你能展示一下包裹吗?我的无法加载..您的不在此特定项目中(即在不同的模块或 jar 中)?
    猜你喜欢
    • 2018-09-18
    • 1970-01-01
    • 2017-05-01
    • 2022-11-16
    • 1970-01-01
    • 2011-07-18
    • 2011-01-18
    • 2012-11-16
    • 2012-09-20
    相关资源
    最近更新 更多