rest web服务_在WildFly的REST Web服务中与Jackson的双向关系

rest web服务

这是使用Jackson的REST Web服务中Java实体之间的双向关系的示例。

  1. 假设我们在两个实体Parent和Child之间存在双向关系。

    bidirectional_relationship_tables
  2. 使用MySQL工作台为这两个表生成SQL模式文件。
    DROP SCHEMA IF EXISTS `bidirectional_schema` ;
    CREATE SCHEMA IF NOT EXISTS `bidirectional_schema` DEFAULT CHARACTER SET utf8 ;
    USE `bidirectional_schema` ;-- -----------------------------------------------------
    -- Table `bidirectional_schema`.`PARENT`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `bidirectional_schema`.`PARENT` ;CREATE  TABLE IF NOT EXISTS `bidirectional_schema`.`PARENT` (`PARENT_ID` INT NOT NULL ,`PARENT_CONTENT` VARCHAR(45) NULL ,PRIMARY KEY (`PARENT_ID`) )
    ENGINE = InnoDB;-- -----------------------------------------------------
    -- Table `bidirectional_schema`.`CHILD`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `bidirectional_schema`.`CHILD` ;CREATE  TABLE IF NOT EXISTS `bidirectional_schema`.`CHILD` (`CHILD_ID` INT NOT NULL ,`CHILD_CONTENT` VARCHAR(45) NULL ,`PARENT_PARENT_ID` INT NOT NULL ,PRIMARY KEY (`CHILD_ID`) ,INDEX `fk_CHILD_PARENT_idx` (`PARENT_PARENT_ID` ASC) ,CONSTRAINT `fk_CHILD_PARENT`FOREIGN KEY (`PARENT_PARENT_ID` )REFERENCES `bidirectional_schema`.`PARENT` (`PARENT_ID` )ON DELETE NO ACTIONON UPDATE NO ACTION)
    ENGINE = InnoDB;
  3. 然后,我们将通过此插入语句将数据插入到这两个表中:
    INSERT INTO `bidirectional_schema`.`parent` (`PARENT_ID`, `PARENT_CONTENT`) VALUES ('1', 'First Parent');
    INSERT INTO `bidirectional_schema`.`child` (`CHILD_ID`, `CHILD_CONTENT`, `PARENT_PARENT_ID`) VALUES ('1', 'First Child', '1');
    INSERT INTO `bidirectional_schema`.`child` (`CHILD_ID`, `CHILD_CONTENT`, `PARENT_PARENT_ID`) VALUES ('2', 'Second Child', '1');
  4. 本示例所需的Jackson API的Maven依赖项。
    <dependency><groupid>com.fasterxml.jackson.core</groupid><artifactid>jackson-annotations</artifactid><version>2.5.2</version>
    </dependency>
    <dependency><groupid>com.fasterxml.jackson.core</groupid><artifactid>jackson-core</artifactid><version>2.5.2</version>
    </dependency>
    <dependency><groupid>com.fasterxml.jackson.core</groupid><artifactid>jackson-databind</artifactid><version>2.5.2</version>
    </dependency>

    另外,您还可以从以下链接中获取所需的Java EE依赖关系: https : //wikis.oracle.com/display/GlassFish/Java+EE+7+Maven+Coordinates

  5. 使用Eclipse从上表中生成实体。 File-> New-> Other,然后从向导中选择Tables中的JPA Entities。 将出现一个向导,以创建到已创建模式的连接。 然后选择两个表子级和父级。 最后,确保“列出persistence.xml中生成的类”。

    bidirectional_relationship_entities_generation_1

    您可以继续并遵循默认设置,但我将映射设置选择为以下各项:

    bidirectional_relationship_entities_generation_2

  6. persistence.xml没有什么花哨的。 但是有两点要考虑。 首先,我没有指定持久性提供程序,因为我倾向于使用WildFly,因此应用程序将使用默认的持久性提供程序Hibernate。 其次,我在WildFly上创建了一个数据源,以便可以将其用于连接到我们的模式。 第三,我使用了EclipseLink,这就是为什么我使用此JPA提供程序org.eclipse.persistence.jpa.PersistenceProvider的原因。 检查这篇文章,将WildFly指向EclipseLink。
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"><persistence-unit name="BidirectionalPU"><provider>org.eclipse.persistence.jpa.PersistenceProvider</provider><jta-data-source>java:jboss/datasources/Bidirectional_DataSource</jta-data-source><class>com.ithinkisink.entity.Child</class><class>com.ithinkisink.entity.Parent</class></persistence-unit>
    </persistence>
  7. 我们将实现的第一个类是ApplicationConfiguration类,它将指向即将到来的REST服务的父路径。
    package com.ithinkisink;import javax.inject.Singleton;
    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;/*** * @author Belal**/
    @Singleton
    @ApplicationPath("rest")
    public class ApplicationConfiguration extends Application {
    }
  8. 然后,我们将创建MyService类,该类将具有两个REST Web服务。 第一个将检索已获取子项的父项。 第二个与此相反,它将检索一个提取了其父对象的孩子。
    package com.ithinkisink.service;package com.ithinkisink.service;import javax.ejb.EJB;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;import com.ithinkisink.entity.Child;
    import com.ithinkisink.entity.Parent;/*** * @author Belal**/
    @Path("MyService")
    public class MyService {@EJBMyServiceDAO myServiceDAO;@GET@Path("/retrieveParentWithChildren")@Produces(MediaType.APPLICATION_JSON)public Parent retrieveParentWithChildren() {return myServiceDAO.retrieveParentWithChildren();}@GET@Path("/retrieveChildWithParent")@Produces(MediaType.APPLICATION_JSON)public Child retrieveChildWithParent() {return myServiceDAO.retrieveChildWithParent();}
    }
  9. 然后,我们将创建ServiceDAO,并注意EntityManager注入了与我们在persistence.xml中已定义的持久性单元的连接。 我通过了持久性单元的名称来明确这一点。 但是您可以只使用注释@PersistenceContext而不指定unitName属性,然后它将使用我们的持久性单元,因为在我们的应用程序中没有定义其他持久性单元。
    package com.ithinkisink.service;import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;import com.ithinkisink.entity.Child;
    import com.ithinkisink.entity.Parent;@Stateless
    public class MyServiceDAO {@PersistenceContext(unitName="BidirectionalPU")protected EntityManager entityManager;public Parent retrieveParentWithChildren() {int parentId = 1;Query q = entityManager.createQuery("SELECT p FROM " + "Parent " + "p JOIN FETCH p.childs WHERE p.parentId = :parentId ");q.setParameter("parentId", parentId);return (q.getResultList().size() > 0) ? (Parent) q.getResultList().get(0) : null;}public Child retrieveChildWithParent() {int childId = 1;Query q = entityManager.createQuery("SELECT c FROM " + "Child " + "c JOIN FETCH c.parent WHERE c.childId = :childId ");q.setParameter("childId", childId);return (q.getResultList().size() > 0) ? (Child) q.getResultList().get(0) : null;}
    }
  10. 现在我们的应用程序已准备好进行测试,可以将其添加到WildFly服务器。 然后启动服务器应该成功。

    bidorectional_relationship_wildfly
  11. 为了简单起见,我使用Postman来测试正在运行的REST Web服务。 下面是Postman结果的屏幕截图。

    bidirectional_rest_1 bidirectional_rest_2
  • 您可以从以下链接在我的Github上找到完整的示例: https : //github.com/belalgalal/Blogging/tree/master/BidirectionalRESTJson

翻译自: https://www.javacodegeeks.com/2016/02/bidirectional-relationship-jackson-rest-web-services-wildfly.html

rest web服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源项目】基于Directx屏幕录制

#include<d3d9.h> #include<iostream> #pragma comment(lib,"d3d9.lib") using namespace std; //截取全屏 void CaptureScreen(void *data) {//1 创建directx3d对象static IDirect3D9 *d3d nullptr;if (!d3d){d3d Direct3DCreate9(D3D_SDK_VERSION);…

git 修改分支名字_基础Git操作与GitHub协作吐血整理,收好!| 原力计划

作者 | 光子俊来源 | CSDN博客出品 | CSDN(ID:CSDNnews)Git介绍Git是目前世界上最先进的分布式版本控制系统&#xff0c;可以为我们管理项目、构建工程、多人协作提供便利&#xff0c;作为一个爱技术的你可以是必须要掌握的呀&#xff01;&#xff01;&#xff01;Git安装(inst…

Win7system登录打开计算机,Windows7系统system文件丢失导致开机黑屏如何解决

最近有windows7系统用户在开机的时候遇到了黑屏的问题&#xff0c;却提示“因以下文件的损坏或丢失&#xff0c;Windows无法启动windows/system32/config/system”的错误&#xff0c;导致无法开机&#xff0c;针对Windows7系统system文件丢失导致开机黑屏问题&#xff0c;本文就…

javafx阴影_JavaFX技巧来节省内存! 属性和可观察对象的阴影场

javafx阴影在 JavaFX的世界中&#xff0c; Properties API允许UI开发人员将值绑定到UI控件。 这种功能出奇的简单&#xff0c;但是当对象模型经常使用属性时&#xff0c;应用程序可能会很快耗尽内存。 我通常会编写两个单独的对象&#xff0c;例如pojo类和表示模型对象。 此技术…

【开源项目】基于QT录制PCM音频实例详细

#include "QtAudio_input.h" #include <QtWidgets/QApplication> #include<QAudioInput> #include<iostream> using namespace std; int main(int argc, char *argv[]) {QAudioFormat fmt;fmt.setSampleRate(44100);//样本率fmt.setSampleSize(16)…

工业计算机改造报告,工业计算机实验报告..docx

实验一 A/D、D/A 转换实验一、实验目的1.了解温控系统的组成。2.了解NI 测量及自动化浏览器的使用并对数据采集卡进行设置。3.了解Dasylab 软件的各项功能&#xff0c;并会简单的应用。4.通过实验了解计算机是如何进行数据采集、控制的。二、实验设备微型计算机、NI USB 6008 数…

yum install -y 是什么意思_为什么你应该在docker 中使用gosu?

为什么要使用gosu&#xff1f;Docker容器中运行的进程&#xff0c;如果以root身份运行话会有安全隐患&#xff0c;该进程拥有容器内的全部权限&#xff0c;更可怕的是如果有数据卷映射到宿主机&#xff0c;那么通过该容器就能操作宿主机的文件夹了&#xff0c;一旦该容器的进程…

openshift_Openshift源中的高可用性Drools无状态服务

openshift嗨&#xff0c;大家好&#xff01; 在这篇博客文章中&#xff0c;我想举一个简单的示例&#xff0c;展示使用Openshift 3&#xff08;Docker和Kubernetes&#xff09;扩展我们的Drools Stateless服务有多么容易。 我将展示如何通过按需提供新实例来扩展我们的服务&…

【WebRTC---源码篇】(一)全局初始化

一&#xff0c;任何平台的客户端在使用WebRTC的API之前都需要进行一些初始化操作&#xff0c;主要是设置实验性功能开关&#xff0c;初始化SSL&#xff0c;当然也可以启用trace,设置日志输出等。 Windows和Linux端的初始化 rtc::WinsockInitializer winsock_init;rtc::Win32So…

ibm服务器芯片架构,IBM x366 服务器技术详解

背景资料IBM eServer x366 提供了突破性的 4 路性能&#xff0c;采用机架优化的 3U服务器设计&#xff0c;结合了源自大型机灵感的 eServer X3技术的高可用性&#xff0c;具有最新 64 位Intel Xeon MP 处理器带来的 64位性能&#xff0c;可创建面向商业企业应用程序、虚拟化及 …

python函数调用自身后果_python 写函数在一定条件下需要调用自身时的写法说明...

例如以下这个函数&#xff1a;state 1 def set_state(state): while state: set int(input(请输入9或5,显示"hello world"\n)) if set 9 or set 5: print(hello world) state int(input(输入1继续&#xff0c;输入0停止&#xff01;\n)) else: print(请输入要求…

python antlr_使用ANTLR在5分钟内用Java解析任何语言:例如Python

python antlr我喜欢出于多种目的处理代码&#xff0c;例如静态分析或自动重构。 对我来说&#xff0c;有趣的部分是推理从抽象语法树&#xff08;AST&#xff09;构建的模型。 为此&#xff0c;您需要一种从源文件中获取AST的方法。 可以使用ANTLR轻松完成此操作&#xff0c;并…

【WebRTC---源码篇】(二)PeerConnectionFactory

在初始化之后,使用PC之前需要先创建和初始化PeerConnectionFactory对象,因为PC的创建使用了工厂模式。实现在InitializePeerConnection()中实现,其中还调用了 PC的创建以及添加相关轨 //创建PC Factory,这个函数会在用户呼叫对方,或者收到对方呼叫信息时调用 bool Conducto…

服务器安装虚拟交换机,虚拟交换机配置如何操作?虚拟交换机配置步骤有哪些...

很多朋友在做虚拟交换机配置的时候&#xff0c;不知道如具体的操作方法&#xff0c;下面新网就给大家详细的介绍下虚拟交换机配置如何操作以及虚拟交换机配置步骤有哪些等问题&#xff0c;以供参考。虚拟交换机配置方法1.先安装驱动D:\Company\S5700S-28P-LI-AC\驱动\S5700系列…

rostcm6情感分析案例分析_卷积情感分析

这是一个面向小白(比如&#xff0c;本人)的关于情感分析的系列教程 [1]。老鸽子整理了“4 - Convolutional Sentiment Analysis.ipynb”中的内容。本文任务&#xff1a;使用卷积神经网络(CNN)来实现句子分类。简介CNN用于分析图像&#xff0c;包含一个或多个卷积层&#xff0c;…

java jigsaw_60秒内使用Java 9的Project Jigsaw的JavaFX HelloWorld

java jigsaw到目前为止&#xff0c;您可能已经听说过Java 9的新模块系统&#xff0c;即项目Jigsaw。 如果您不了解Java 9的新模块系统&#xff0c;则应该访问Mark Reinhold的论文“模块系统的状态” 。 另外&#xff0c;您应该在nipafx上查看 Nicolai Parlog的优秀博客&#xf…

C++ 11 深度学习(三)范围for、new内存动态分配、nullptr

1.范围for 作用&#xff1a;用于遍历一个序列&#xff0c;例&#xff1a; int v[]{ 1,2,3,4,5,6 };for (auto x : v)//数组v中每个元素&#xff0c;依次放入x中;cout << x << endl; 2.new和delete new和delete是C中的两个关键字&#xff0c;其中new 先执行mallo…

opencv python 多帧降噪算法_OpenCV-Python中用于视频跟踪的Meanshift和Camshift算法介绍...

学习目标在本章中&#xff0c;我们将学习用于跟踪视频中对象的Meanshift和Camshift算法。MeanshiftMeanshift背后的直觉很简单&#xff0c;假设你有点的集合。(它可以是像素分布&#xff0c;例如直方图反投影)。你会得到一个小窗口(可能是一个圆形)&#xff0c;并且必须将该窗口…

【视频码率==文件传输大小等通用计算】

1字节&#xff08;Byte&#xff09; 8位&#xff08;bit&#xff09;&#xff0c;我们通常称比特为小b 1千字节&#xff08;KB,Kilobyte&#xff09;1024字节&#xff08;2的10次方字节&#xff09;&#xff08;1KB1024B&#xff09;&#xff0c;我们经常称字节为大B 通用计算…

vue.jsr入门_JSR-308和Checker框架为jOOQ 3.9添加了更多类型安全性

vue.jsr入门Java 8引入了JSR-308&#xff0c;它为Java语言添加了新的注释功能。 最重要的是&#xff1a;键入注释。 现在可以像下面这样设计怪物了&#xff1a; 比注解更疯狂的是类型注解。 在数组上。 谁认为这是有效的Java代码&#xff1f; pic.twitter.com/M9fSRRerAD — …