rest web服務
這是使用Jackson的REST Web服務中Java實體之間的雙向關系的示例。
假設我們在兩個實體Parent和Child之間存在雙向關系。 使用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; 然后,我們將通過此插入語句將數據插入到這兩個表中: 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'); 本示例所需的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
使用Eclipse從上表中生成實體。 File-> New-> Other,然后從向導中選擇Tables中的JPA Entities。 將出現一個向導,以創建到已創建模式的連接。 然后選擇兩個表子級和父級。 最后,確保“列出persistence.xml中生成的類”。
您可以繼續并遵循默認設置,但我將映射設置選擇為以下各項:
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> 我們將實現的第一個類是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 {
} 然后,我們將創建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();}
} 然后,我們將創建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;}
} 現在我們的應用程序已準備好進行測試,可以將其添加到WildFly服務器。 然后啟動服務器應該成功。 為了簡單起見,我使用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的双向关系 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。