带有自定义注释的 JSON 到 POJO

2024-04-24

我试图在从 JSON 生成的 Java 代码中包含 Spring Boot 注释,如下所示:

@Entity
public class Person {
...
}

and

@Repository
public interface PersonRepository extends CrudRepository<Person, Long> 
{
}

我正在从 JSON 转换为 POJO本教程 http://www.littlebigextra.com/how-to-convert-json-schema-to-java-classes-using-maven-plugin/#Add-jsonschema2pojo-maven-plugin-in-POMXML。我可以在 json 文件中添加什么以使生成的 Java 类包含注释 @Entity 和 @Repository?我还没有找到有关如何提供自定义注释的教程或解释。

jsonschema2pojo https://github.com/joelittlejohn/jsonschema2pojo/issues/524看起来它可以在生成类时使用自定义注释器,但我想知道 Jackson 是否有内置的东西可以轻松允许自定义注释?


jsonschema2pojo 的 customAnnotator 允许我向生成的 java 文件添加自定义注释。令人烦恼的是你的注释器类必须位于单独的项目中并且必须包含在插件中. 这就是为什么 https://github.com/joelittlejohn/jsonschema2pojo/issues/722#issuecomment-299455246.

将依赖项添加到您的 pom.xml

<dependency>
    <groupId>org.jsonschema2pojo</groupId>
    <artifactId>jsonschema2pojo-core</artifactId>
    <version>0.4.0</version>
</dependency>

将插件添加到 pom.xml 插件中

<plugin>
    <groupId>org.jsonschema2pojo</groupId>
    <artifactId>jsonschema2pojo-maven-plugin</artifactId>
    <version>0.5.1</version>
    <dependencies>
        <!-- NOTE: Your annotator MUST come from a dependency -->
        <dependency>
            <groupId>ANNOTATOR_GROUP_ID</groupId>
            <artifactId>ANNOTATOR_ARTIFACT</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <scope>compile</scope>
            <version>1.5.2.RELEASE</version>
        </dependency>
       <!-- NOTE: Any annotation used must have its dependency here!!! -->
    </dependencies>
    <configuration>
        <sourceDirectory>${basedir}/src/main/resources/schema</sourceDirectory>
        <targetPackage>com.test.gen</targetPackage>
        <useCommonsLang3>true</useCommonsLang3>
        <customAnnotator>com.fully.qualified.path.YourAnnotator</customAnnotator>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
</plugin>

创建您的自定义注释器类一个单独的项目.

package com.deere.gtin_k.pdeaas.work_manager.application;

import com.fasterxml.jackson.databind.JsonNode;
import com.sun.codemodel.JDefinedClass;
import com.sun.codemodel.JFieldVar;
import org.jsonschema2pojo.AbstractAnnotator;

import javax.persistence.Entity;

public class HibernateAnnotator extends AbstractAnnotator {

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

        // Note: does not have to be the propertyName, could be the field or propertyNode that is verified.
        if (propertyName.equals("entity")) {
            clazz.annotate(Entity.class);
        }
    }
}

最后是json文件:

{
  "title": "Person",
  "type": "object",
  "properties": {
    "entity": true,
    "name": {
      "type": "string"
    }
  }
}

最终结果:

package com.test.gen;

import java.util.HashMap;
import java.util.Map;
import javax.persistence.Entity;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;


/**
 * Person
 * <p>
 * 
 * 
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@Entity
@JsonPropertyOrder({
    "entity",
    "name"
})
public class Person {

    @JsonProperty("entity")
    private Object entity;
    ...
}

我希望有一种更简单的方法来做到这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有自定义注释的 JSON 到 POJO 的相关文章

  • Liquibase 从 JPA 实体生成变更日志

    我有一个 Spring boot spring data jpa 项目 带有一个父模块和三个子模块 我的模块之一负责我的 JPA 实体 我需要使用该实体的 liquibase 生成一个 xml 变更日志 在我的 liquibase prop
  • Swift 4 使用随机密钥解码嵌套 JSON [重复]

    这个问题在这里已经有答案了 我是 Swift 4 的新手 正在尝试从 Wikipedia API 解码此 JSON 我正在努力定义一个结构 因为我发现的所有示例 教程都仅嵌套 1 2 层深度 除此之外 当其中一个密钥是随机的时 如何解码数据
  • 如何在 Java 中安装附加包?

    我对 Java 很陌生 我想使用名为的包中的一些功能daj 教程代码有以下几行 import daj import java util import java lang Math import Msg 但第一行和第四行会产生红色下划线 导致
  • 可以向 @ManyToMany Hibernate 额外表添加额外字段吗?

    我有这两类 表 Entity Table name course public class Course Id Column name courseid private String courseId Column name coursen
  • 将二进制数据的 byte[] 转换为 String

    我有二进制格式的数据 hex 80 3b c8 87 0a 89 我需要将其转换为字符串 以便通过 Jackcess 将二进制数据保存在 MS Access 数据库中 我知道 我不打算在 Java 中使用 String 来存储二进制数据 但
  • Java 将字节转换为二进制安全字符串

    我有一些以字节为单位的数据 我想将它们放入Redis中 但是Redis只接受二进制安全字符串 而我的数据有一些二进制非安全字节 那么如何将这些字节转换为二进制安全字符串以便将它们保存到 Redis 中呢 Base64 对我有用 但它使数据更
  • angular.copy() 和 JSON.parse(JSON.stringify()) 之间的区别?

    有人可以解释 angular copy 和 JSON parse JSON stringify 之间的区别吗 有吗 您会推荐使用什么 angular fromJson angular toJson 与 JSON parse JSON str
  • 可以混合使用 JVM 语言吗?即:Groovy 和 Clojure

    我知道你可以轻松地混合groovy java clojure java 无论什么JvmLang java 这是否也意味着我也可以让 clojure 和 groovy 代码进行交互 如果我使用 Grails 或 jRoR 我也可以在该环境中使
  • Jmeter动态生成请求的json负载

    我有一个 Jmeter 测试计划 我希望 HttpSampler 发送发布请求 请求正文应包含 Json 如下所示 productIds p1 p2 我设置了一个随机变量生成器 每次调用都会返回格式正确的 ProductId 我想做的是通过
  • 是否可以用 json 进行表达式/计算?

    我使用出色的 json server 作为应用程序的后端 它对于访问自定义端点以检索一些数据非常有用 但是如果它允许我进行计算 表达式以便我也可以模仿后端行为 那将会非常有用 以这个数据结构为例 products name football
  • Spring @Value 添加验证小于

    我使用以下属性值注入 我如何向此操作添加小于验证 我的意思是我想设置一个验证user maxpassiveday可以说 财产价值不得低于 100 Value user maxpassiveday int maxpassiveday 使用Sp
  • 嵌套对象的 AJV 模式验证

    函数返回的对象看起来像这样 answer vehicle type 1 message Car model VW color red 答案 对象始终存在 其他字段基于 vehicle type E g 如果vehicle type 1 则有
  • 使用antlr4获取预处理器行并解析C代码

    我正在使用 Antlr4 来解析 C 代码 并使用以下语法来解析 链接到 C g4 https github com antlr grammars v4 blob master c C g4 上面的语法默认不提供任何解析规则来获取预处理器语
  • 日志记录在 Android 设备上实际上有什么作用?

    我一直在 Android 示例中看到这样的代码 try catch Exception e Log e Error e getMessage 什么是Log e实际上在物理设备上做什么 它进入系统日志 开发人员可以通过 SDK 工具访问该日志
  • 在openjdk:7-jre-alpine docker上如何安装python 3.6

    直到大约一周前 我才在 java 图像上成功使用 python 3 6 脚本 如下所示 FROM openjdk 7 jre alpine RUN apk update apk upgrade apk add no cache bash a
  • 为什么jdk中没有ConcurrentLinkedHashMap类?

    这个问题直接接着问从我之前的问题来看 https stackoverflow com q 12299731 1527084 我想我的第二个问题的答案是否定的 所以我想了解为什么 java util concurrent 包中没有 Concu
  • Scala 2.10,它对 JSON 库和案例类验证/创建的影响

    显然 在 Scala 2 10 中我们得到了改进的反射 这将如何影响 lift json jerkson sjson 和朋友 此外 我们能否期望在不久的将来 Scala 中会出现内置的 JSON 语言功能 如 Groovy 的出色 GSON
  • 相当于 C# 中 Java 的“ByteBuffer.putType()”

    我正在尝试通过从 Java 移植代码来格式化 C 中的字节数组 在 Java 中 使用方法 buf putInt value buf putShort buf putDouble 等等 但我不知道如何将其移植到 C 我尝试过 MemoryS
  • javafx中的stackpane和root有什么区别?

    我正在练习javafx做饼图 以下是开发饼图的代码 如果我这样做Group并与StackPane 我发现输出没有区别 我已经评论了组部分 只是徘徊两者之间的区别 import javafx application Application i
  • 按字母顺序对对象的 ArrayList 进行排序

    我必须创建一个方法来排序数组列表根据电子邮件按字母顺序排列对象 然后打印排序后的数组 我在排序时遇到麻烦的部分 我已经研究过并尝试使用Collections sort vehiclearray 但这对我不起作用 我是因为我需要一个叫做比较器

随机推荐

  • 如何在Linux中使用C或shell检查密码?

    我有一个用 C 编写的程序 运行在嵌入式 Linux 上 有时它想检查系统用户的密码 如果我能得到地穴盐 etc 密码 我可以使用 crypt 检查用户密码的正确性 有没有shell脚本可以帮助我检查密码 比如check passwd用户名
  • 未解决的参考:用 Kotlin 编写的 Activity 中的 GlideApp

    简而言之 我的问题是我无法在用 Kotlin 编写的活动中使用 GlideApp 生成的 API 有趣的是 Android Studio 看到了参考 我可以打开生成的 GlideApp 有代码完成 但是当我尝试构建它时 它失败了 未解决的参
  • 如何比较C/C++中的日期范围?

    C C 中是否有系统定义的函数来比较两个日期 Thanks 这是我最喜欢的日期类 仅限 C 不是 C http howardhinnant github io date html http howardhinnant github io d
  • 如何使用正则表达式作为字符串标记器的分隔符

    我想检索之间的字符串 2 and 使这项工作有效的正则表达式序列是什么 据说我有 2 21381030213jafjs231 adfafafasdfas我正在使用 StringTokenizer test new StringTokeniz
  • 消息“术语‘ng’未被识别为 cmdlet 的名称”

    今天 在学习一些基本的 AngularJS 介绍时 我遇到了一个问题 我打开 PowerShell 来开始这个项目 新公共管理发挥了作用 我能够使用以下方式安装 Angular npm install g angular cli 每当我尝试
  • 在 Redux 中访问中间件中的状态

    我的 React Redux 应用程序中有一个中间件 如下所示 export const myMiddleware store gt next gt async action gt switch action type case types
  • 为什么不是每种类型的对象都可序列化?

    为什么不是每种类型的对象都是隐式可序列化的 以我有限的理解 对象不就是简单地存储在堆上并将指向它们的指针存储在堆栈上吗 难道您不应该能够以编程方式遍历它们 以通用格式存储它们 并且还能够从那里重建它们吗 某些对象封装了无法访问的资源 例如文
  • param : JSP 中的隐式 EL(表达式语言)对象

    如果我有这样的 URL 怎么办 servlet jsp myparam myvalue 这 2 个 EL 应返回输出 我的价值 但我其实不明白为什么 param values myparam 0 param values myparam 0
  • Osmdroid 离线文件

    我有一个 osmdroid 地图 我想从 MOBAC 的 osmdroid zip 或 gemf 文件加载离线图块 我查看了它 无论我走到哪里 它都说只需将其放入 sdcard osmdroid 中即可 但它不起作用 我需要更改代码中的某些
  • 在 C# 插件中更改业务流程阶段

    我正在关注this https msdn microsoft com en us library dn481586 aspx Server side 20programmability 20support 20for 20business
  • Tyrus WebSockets (Java) - 如何设置客户端本地 IP 地址

    使用 WebSockets Tyrus 时有没有办法指定本地 IP 地址和端口 我正在寻找你可以用完整的 4 个参数构造函数做的同样的事情Socket http docs oracle com javase 6 docs api java
  • 内容变更推送通知

    假设我有一个 Android 应用程序 它仅使用从随机 REST API 获取的内容构建 ListView 想象一下 现在我需要在 API 上有新内容时发送推送通知 最简单的方法是什么 我对 Android 上的推送通知过程有点困惑 我查看
  • Opengl 非同步/非阻塞地图

    我刚刚找到以下内容OpenGL 规范ARB map buffer range http www opengl org registry specs ARB map buffer range txt 我想知道是否可以使用此扩展进行非阻塞地图调
  • 禁用 dexpreopt 构建单独的 Android 模块

    对于我的论文 我正在修改 android 框架并构建源代码 4 1 1 Jelly Bean 我可以进行完整的构建 但因为这非常耗时 我正在 ubuntu 12 04 64 位虚拟机上开发 所以我想构建单独的模块 例如 当对位置模块进行更改
  • jQuery 通过类和属性获取

    嗨 我有一个选择 例如
  • 实体框架 - 包含在子查询中?

    我不确定这个问题是否已经得到解答 我查看了几个问题 但我认为它们并不是我想要的 假设我有 3 张表 Restaurant 1 M MenuCategory 1 M MenuItem 我有一个 L2E 查询 如下所示 Restaurant c
  • arrayAdapter getView 方法内的侦听器

    我有一个用于 ListView 的自定义 row item 其中包含图像 一对 TextView 和一个复选框 据我了解 由于 checkBox 是一个可聚焦元素 它会从 listView 中窃取焦点 因此 OnListItemClicke
  • 将文件路径添加到列表框项目

    我试图将文件路径存储在列表框项目的标签中 我正在使用下面的内容进行搜索并将所需的文件夹名称添加到列表框中 我已经添加了ListBox1 Tag sDir行到第一行上方Next当我单步执行代码时 值sDir似乎保留了路径 但是如果我创建一个简
  • 如何在 swift 中导入自定义框架中存在的类

    我有一个自定义框架 它包含一些公共类 但我无法使用该公共类 在 Objective C 中我们可以导入为 import
  • 带有自定义注释的 JSON 到 POJO

    我试图在从 JSON 生成的 Java 代码中包含 Spring Boot 注释 如下所示 Entity public class Person and Repository public interface PersonRepositor