首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jsonschema2pojo还生成自定义注释器的对象

jsonschema2pojo还生成自定义注释器的对象
EN

Stack Overflow用户
提问于 2019-08-05 10:49:43
回答 1查看 2K关注 0票数 3

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

json模式

代码语言:javascript
运行
复制
{
  "title": "Person",
  "type": "object",
  "properties": {
    "lombok-builder": true,
    "lombok-data": true,
    "lombok-to-string": true,
    "name": {
      "type": "string"
    }
  }
}

自定义注释器

代码语言:javascript
运行
复制
 @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

代码语言:javascript
运行
复制
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")等:|

EN

回答 1

Stack Overflow用户

发布于 2019-08-06 07:00:45

经过一段时间和研究后,我意识到我做错了。以下是使用additionalProperties处理propertyInclusion所需的工作注释器和示例模式,可供有类似问题的任何人使用。

代码语言:javascript
运行
复制
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架构。

代码语言:javascript
运行
复制
{
  "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"
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57351685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档