rest web服务

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

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

  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中生成的类”。

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

  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服务器。 然后启动服务器应该成功。

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

  • 您可以从以下链接在我的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服务

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

  1. 在WildFly的REST Web服务中与Jackson的双向关系

    这是使用Jackson的REST Web服务中Java实体之间的双向关系的示例. 假设我们在两个实体Parent和Child之间存在双向关系. 使用MySQL工作台为这两个表生成SQL模式文件. DR ...

  2. 手工建立mysql的服务_怎样自已手工打开mysql服务

    软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...

  3. app开发和web开发_了解2020年现代Web App开发的概念

    app开发和web开发 Millions of businesses exchange information on the internet and to interact with their t ...

  4. 部署go的web应用_使用Docker部署Go Web应用

    为什么需要Docker? 使用docker的主要目标是容器化.也就是为你的应用程序提供一致的环境,而不依赖于它运行的主机. 想象一下你是否也会遇到下面这个场景,你在本地开发了你的应用程序,它很可能有很 ...

  5. asp.net web开发框架_用Python开发一个Web框架

    一.Web框架 首先我们今天要做的事是开发一个Web框架.可能听到这你就会想.是不是很难啊?这东西自己能写出来? 如果你有这种疑惑的话,那就继续看下去吧.相信看完今天的内容你也能写出一个自己的Web框 ...

  6. web浏览器_你最常用的web测试-浏览器兼容性测试

    如今,市面上的浏览器种类越来越多(尤其是在平板和移动设备上),这就意味着你所测试的站点需要在这些你声称支持浏览器上都能很好的工作. 同时,主流浏览器(IE,Firefox,Chrome,Opera,S ...

  7. python写一个服务_写一个Python的windows服务

    1. 安装pywin32和pyinstaller pip install pywin32 pip install pyinstaller 2.写一个服务Demo # -*- coding: utf-8 ...

  8. 开发web前端_移动前端开发和web前端开发的区别?

    如果说非要有区别的话应该就是开发的软件和方式不同,因为他们本来就不属于一端的东西,具体来看看下面: web前端开发 用最简单粗暴的方式来讲,就是用html + css + javascript来构建一 ...

  9. docker部署python web应用_安装docker并部署web项目

    一.docker简介 1.docker定义:docker是一个用来装应用的容器,就像杯子可以装水,笔筒可以装笔,书包可以放书一样.你可以把"hello world!"放到docke ...

最新文章

  1. centos pureftpd mysql_使用PureFTPd和MySQL的虚拟主机(包括配额和带宽管理)在CentOS 6.2上...
  2. 计算机网络(谢希仁)-第一章:概述
  3. nodejs 中on 和 emit
  4. 看看,这就是微软的“万物互联”系统 window10 IOT
  5. C# 获取配置文件节点值
  6. 设置phpMyAdmin连接本机已存在数据库
  7. ORACLE SQL调优案例一则
  8. 您无权查看或编辑目前的权限设置;但是,您可以取得所有权或更改审核设置
  9. GitHub GraphQL API已正式可用
  10. atitit.提升开发效率---MDA 软件开发方式的革命(4)----编辑表单建模
  11. Springboot - 构建基于XML交互的Restful应用程序
  12. Second copy 的增量备份
  13. Overleaf使用技巧 (latex公式,latex表格,latex图片排版)
  14. Python程序设计,pygame飞机大战课程设计
  15. 【毕设参考】ESP32 + HaaS Python打造可以统计流量的自动感应门系统
  16. 移动端天气系统--【下雨】效果之【雨滴】的实现和分析
  17. GBase XDM 模型概要
  18. WinRAR实用技巧:一个设置,可能让多文件压缩变得更小!
  19. 【论文阅读】ICRA2021: VDB-EDT An Efficient Euclidean Distance Transform Algorithm Based on VDB Data Struct
  20. SD/TF卡驱动(二)--------SD卡程序初始化流程以及读写

热门文章

  1. 欢乐纪中某B组赛【2019.1.25】
  2. 学习手记(2018/7/14~2018/7/18)——快乐纪中
  3. 【动态规划】 摆花 【NOIp普及组 2012 第三题】 (ssl 2360/luogu 1077)
  4. Educational Codeforces Round 48
  5. 23、java中的网编基础
  6. Sentinel(十)之系统自适应限流
  7. (二)利用Java WebService调用天气预报实践
  8. C++描述杭电OJ 2005.第几天? ||
  9. JSP 统计网站访问人数
  10. 2018蓝桥杯省赛---java---B---2(方格计数)