首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

NetBeans IDE 實戰:RESTful Web 服務開發入門指南(含 Google Maps 整合)

     編輯:Java 相關知識

NetBeans IDE 內建對 JAX-RS (JSR 311/339/370) 與 Jersey 參考實現的全周期支持:從實體類生成、服務骨架創建、測試客戶端生成、到第三方 REST API(如 Google Maps)拖拽整合。本文以 CustomerDB 示例項目為線索,演示 REST 服務全棧開發流程。

環境準備與項目創建

組件推薦版本
NetBeans IDE8.2+ (Java EE 包)
JDK8+
應用服務器GlassFish 4/5, Payara, WildFly, Tomcat 8/9 + Jersey
數據庫Java DB (Derby) 內置 jdbc/sample 或 MySQL sample 库

創建 Web 應用項目

  1. File → New Project → Java Web → Web Application
  2. 項目名:CustomerDB
  3. Server:GlassFish / Tomcat,Java EE 7/8
  4. (可選)勾選 Spring Web MVC 框架啟用 Spring 事務管理

一鍵生成:實體類 + REST 服務 + 持久化單元

  1. 右鍵項目 → New → Other → Web Services → RESTful Web Services from Database
  2. 數據源:選擇 jdbc/sample (Derby) 或新建 MySQL 連接
  3. 可用表:選中 CUSTOMER,自動關聯 DISCOUNT_CODE
  4. 實體類包:entities;服務包:service
  5. 完成向導,IDE 生成:
  • entities.Customer, entities.DiscountCode(JPA @Entity + JAXB @XmlRootElement)
  • service.CustomerFacadeREST, service.DiscountCodeFacadeREST(@Stateless + @Path + @GET/@POST/@PUT/@DELETE)
  • persistence.xml (JTA 數據源)
  • web.xml (Jersey ServletContainer 初始化) 或 ApplicationConfig (EE 7+ 無 web.xml)

EE 6/7 vs EE 8+ 代碼差異

  • EE 6/7:生成 converter 包 (CustomerConverter) 手動處理 Entity ↔ JAXB 對象轉換。
  • EE 8+ (Jakarta EE):實體類直接標註 @XmlRootElement、@XmlElement,服務類直接返回 Entity,容器自動序列化,**無需轉換器**,代碼量減少 40%+。

內建測試客戶端:零代碼驗證 REST 端點

  1. 右鍵項目 → Test RESTful Web Services
  2. 服務器啟動、應用部署、瀏覽器打開測試頁
  3. 左側資源樹:customers, discountCodes
  4. 點擊 customers → 選擇 GET (application/xml) → Max: 3 → Test

結果面板 5 個標簽:

  • Table View:扁平化 URI 列表,可點擊導航子資源
  • Raw View:原始 XML/JSON 響應體
  • Sub-resources:資源層級 URL 映射
  • Headers:HTTP 頭信息
  • HTTP Monitor:請求/響應原文

測試客戶端界面

擴展服務:整合 Google Maps API(拖拽式 SAAS 整合)

1. 獲取 Google Maps API Key

訪問 https://developers.google.com/maps/documentation/javascript/get-api-key,授權域名 https://localhost:8080。

2. 在 CustomerFacadeREST 添加端點


@GET
@Path("{id}/map")
@Produces("text/html")
public String getGoogleMap(@PathParam("id") Integer id) {
    Customer c = super.find(id);
    String address = c.getAddressline1() + " " + c.getCity() + " " + c.getState() + " " + c.getZip();
    // 拖拽生成代碼填充此處
    return "";
}

3. 服務窗口拖拽 Google Map Service

  1. Services 標簽 → Web Services → Google → Map Service → getGoogleMap
  2. 拖入上方方法體 return ""; 前
  3. IDE 生成 org.netbeans.saas.google.GoogleMapService 調用代碼

4. 完成實現並配置 Key


@GET @Path("{id}/map") @Produces("text/html")
public String getGoogleMap(@PathParam("id") Integer id) {
    Customer c = super.find(id);
    String address = c.getAddressline1() + " " + c.getCity() + " " + c.getState() + " " + c.getZip();
    try {
        Integer zoom = 15;
        String iframe = "false";
        RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe);
        return result.getDataAsString(); // 返回 HTML iframe
    } catch (Exception ex) {
        ex.printStackTrace();
        return "Error loading map";
    }
}

編輯 googlemapservice.properties,粘入 API Key:api.key=YOUR_KEY。

5. 重新測試

測試客戶端 → customers → 1 → GET (text/html) → 顯示該客戶地址的 Google Map 嵌入頁面。

Spring Framework 整合:事務管理簡化

項目創建時勾選 Spring Web MVC,生成差異:

  • 無 PersistenceService 類(Spring 容器管理 EntityManager)
  • 服務類導入 org.springframework.transaction.annotation.Transactional
  • 方法標註 @Transactional,聲明式事務邊界
  • 需手動添加 aopalliance.jar (Spring 3 依賴) 至 Libraries

優勢:代碼更清爽、事務傳播/隔離/回滾規則統一聲明、支持 @PersistenceContext 注入 EntityManager。

常見問題排查

現象原因解決
類找不到 / ClassNotFoundExceptionJersey 庫未加入編譯時 classpath右鍵項目 → Properties → Libraries → Add Library → Jersey
Tomcat 7 部署 EE 8+ REST 失敗缺少 EJB 3.1 / CDI 實現升級 TomEE / WildFly / Payara,或降級為 EE 7 專案
Google Map 顯示海洋地址解析失敗檢查地址字段完整性,API Key 配額、Referrer 限制
Spring 專案啟動報錯缺少 aopalliance.jar下載添加至 Libraries,刪除代碼中誤生成的 @Error 註解

最佳實踐總結

  1. 契約優先:先設計資源 URI、HTTP 方法、請求/響應 Schema,再生成代碼。
  2. 實體即資源:JPA Entity 直接標註 JAXB,避免 DTO 轉換層(除非需要視圖模型隔離)。
  3. 分頁與過濾:@QueryParam("start"), @QueryParam("max"), @QueryParam("q") 標準化列表參數。
  4. 版本控制:URI 包含版本 /api/v1/customers,或 Accept 頭 application/vnd.myapp.v1+json。
  5. 安全:JWT/OAuth2 保護端點,@RolesAllowed 細粒度授權。
  6. 文檔化:整合 Swagger/OpenAPI (Maven 插件生成 swagger.json)。

結語

NetBeans 將「數據庫 → 實體 → REST 服務 → 測試客戶端 → 第三方 API 整合」全鏈路壓縮為可視化向導與拖拽操作,讓開發者聚焦業務邏輯而非樣板代碼。無論選擇純 JAX-RS、Spring MVC 還是 MicroProfile,資源導向設計、HTTP 語義正交、聲明式序列化/事務/安全才是構建可演進 REST 系統的核心原則。掌握 IDE 能力邊界,並在架構層面做正確抉擇,方能行穩致遠。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved