1. 程式人生 > >springboot + retrofit(平臺間介面呼叫)

springboot + retrofit(平臺間介面呼叫)

retrofit:一套RESTful架構的Android(Java)客戶端實現。

好處:

  • 基於註解
  • 提供JSON to POJOPOJO to JSON網路請求(POST,GET,PUT,DELETE等)封裝
  • 可以看做是對HttpClient的再次封裝

1、為了做測試,建立了一個新的springboot專案"myboot2",專案結構如下:

1.1、pom.xml

複製程式碼
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.xxx</groupId> 8 <artifactId>myboot2</artifactId> 9 <version>1.0-SNAPSHOT</version>
10 11 <properties> 12 <java.version>1.8</java.version><!-- 官方推薦 --> 13 </properties> 14 15 <parent> 16 <groupId>org.springframework.boot</groupId> 17 <artifactId>spring-boot-starter-parent</artifactId>
18 <version>1.2.5.RELEASE</version> 19 </parent> 20 21 <!-- 引入實際依賴 --> 22 <dependencies> 23 <dependency> 24 <groupId>org.springframework.boot</groupId> 25 <artifactId>spring-boot-starter-web</artifactId> 26 </dependency> 27 <!-- 使用swagger --> 28 <dependency> 29 <groupId>io.springfox</groupId> 30 <artifactId>springfox-swagger2</artifactId> 31 <version>2.2.2</version> 32 </dependency> 33 <dependency> 34 <groupId>io.springfox</groupId> 35 <artifactId>springfox-swagger-ui</artifactId> 36 <version>2.2.2</version> 37 </dependency> 38 </dependencies> 39 40 <build> 41 <plugins> 42 <plugin> 43 <groupId>org.springframework.boot</groupId> 44 <artifactId>spring-boot-maven-plugin</artifactId> 45 </plugin> 46 </plugins> 47 </build> 48 </project>
複製程式碼

1.2、Application.java

複製程式碼
 1 package com.xxx.secondboot;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
 6 import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
 7 
 8 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 9 
10 @SpringBootApplication
11 @EnableSwagger2
12 public class Application implements EmbeddedServletContainerCustomizer{
13 
14     public static void main(String[] args) {
15         SpringApplication.run(Application.class, args);
16     }
17 
18     /**
19      * EmbeddedServletContainerCustomizer介面的未實現方法
20      * 指定容器的啟動埠,之後再瀏覽器輸入localhost:8081/swagger-ui.html即可
21      */
22     public void customize(ConfigurableEmbeddedServletContainer container) {
23         container.setPort(8081);
24     }
25 
26 }
複製程式碼

說明:

  • 實現了EmbeddedServletContainerCustomizer介面,並實現了其方法customize(ConfigurableEmbeddedServletContainer container),指定了該服務的啟動埠是8081,這樣在服務myboot(啟動埠:8080)啟動時,就不會存在埠衝突問題了.

1.3、Hotel.java

複製程式碼
 1 package com.xxx.secondboot.domain;
 2 
 3 public class Hotel {
 4     private int id;
 5     private String hotelname;
 6 
 7     public Hotel() {
 8     }
 9 
10     public Hotel(int id, String hotelname) {
11         this.id = id;
12         this.hotelname = hotelname;
13     }
14 
15     public int getId() {
16         return id;
17     }
18 
19     public void setId(int id) {
20         this.id = id;
21     }
22 
23     public String getHotelname() {
24         return hotelname;
25     }
26 
27     public void setHotelname(String hotelname) {
28         this.hotelname = hotelname;
29     }
30 }
複製程式碼

1.4、HotelController.java

複製程式碼
 1 package com.xxx.secondboot.web;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import org.springframework.web.bind.annotation.RequestBody;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8 import org.springframework.web.bind.annotation.RequestMethod;
 9 import org.springframework.web.bind.annotation.RequestParam;
10 import org.springframework.web.bind.annotation.RestController;
11 
12 import com.xxx.secondboot.domain.Hotel;
13 
14 import io.swagger.annotations.Api;
15 import io.swagger.annotations.ApiOperation;
16 
17 @RestController
18 @RequestMapping("/hotel")
19 @Api("HotelController相關api")
20 public class HotelController {
21 
22     @ApiOperation("獲取酒店Hotel資訊:getHotelWithQueryParameter")
23     @RequestMapping(value="/getHotelWithQueryParameter",method=RequestMethod.GET)
24     public Hotel getHotelWithQueryParameter(@RequestParam("hotelname") String hotelname) {
25         if(hotelname.equals("nana")){
26             return new Hotel(777, "假日酒店");
27         }
28         return new Hotel(1314, "玫瑰酒店");
29     }
30     
31     @ApiOperation("獲取酒店Hotel資訊:getHotelList")
32     @RequestMapping(value="/getHotelList",method=RequestMethod.POST)
33     public List<Hotel> getHotelList() {
34         List<Hotel> hotelList = new ArrayList<>();
35         hotelList.add(new Hotel(1314, "玫瑰酒店"));
36         hotelList.add(new Hotel(2046, "2046酒店"));
37         return hotelList;
38     }
39     
40     @ApiOperation("獲取酒店Hotel資訊:getHotelListWithBody")
41     @RequestMapping(value="/getHotelListWithBody",method=RequestMethod.POST)
42     public List<Hotel> getHotelListWithBody(@RequestBody Hotel hotel) {
43         List<Hotel> hotelList = new ArrayList<>();
44         if(hotel.getHotelname().equals("武林酒店")){
45             hotelList.add(new Hotel(13141, "玫瑰酒店1"));
46             hotelList.add(new Hotel(20461, "2046酒店1"));
47             return hotelList;
48         }
49         hotelList.add(new Hotel(1314, "玫瑰酒店"));
50         hotelList.add(new Hotel(2046, "2046酒店"));
51         return hotelList;
52     }
53 }
複製程式碼

說明:該類提供了三個方法,也是將來myboot服務遠端呼叫的三個方法。

2、myboot專案基於上一節的結構繼續編寫

2.1、pom.xml

1          <!-- retrofit -->
2          <dependency>
3              <groupId>com.squareup.retrofit</groupId>
4              <artifactId>retrofit</artifactId>
5              <version>1.9.0</version>
6          </dependency>

說明:引入retrofit1.9.0依賴,與2.0的差別很大。

2.2、RestAdapterConfig.java

複製程式碼
 1 package com.xxx.firstboot.config;
 2 
 3 import org.springframework.context.annotation.Bean;
 4 import org.springframework.context.annotation.Configuration;
 5 
 6 import retrofit.RestAdapter;
 7 
 8 @Configuration
 9 public class RestAdapterConfig {
10     
11     /**
12      * 獲取RestAdapter單例Bean
13      * @return
14      */
15     @Bean
16     public RestAdapter getRestAdapter(){
17         /**
18          * setEndpoint("http://localhost:8081"):指定基本的URL,
19          * API介面中的URL是相對於該URL的路徑的,
20          * 不能少了協議名,例如寫成:localhost:8081就不行
21          */
22         RestAdapter adapter = new RestAdapter.Builder()
23                 .setEndpoint("http://localhost:8081")
24                 .build();
25         return adapter;
26     }
27 
28 }
複製程式碼

說明:

  • 使用 @[email protected] 構建RestAdapter單例
  • 在構建的過程中,一定要有setEndpoint("http://localhost:8081")方法,該方法指定了基本的URL(即:指定協議+IP+port)

2.3、HotelAPI.java

複製程式碼
 1 package com.xxx.firstboot.retrofit.api;
 2 
 3 import java.util.List;
 4 
 5 import com.xxx.firstboot.domain.Hotel;
 6 
 7 import retrofit.http.Body;
 8 import retrofit.http.GET;
 9 import retrofit.http.POST;
10 import retrofit.http.Query;
11 
12 public interface HotelAPI {
13     
14     /**
15      * GET請求帶查詢引數
16      */
17     @GET("/hotel/getHotelWithQueryParameter")
18     public Hotel getHotelWithQueryParameter(@Query("hotelname") String hotelname);
19     
20     /**
21      * POST請求
22      */
23     @POST("/hotel/getHotelList")
24     public List<Hotel> getHotelList();
25     
26     /**
27      * POST請求,帶引數JavaBean
28      */
29     @POST("/hotel/getHotelListWithBody")
30     public List<Hotel> getHotelListWithBody(@Body Hotel hotel);
31     
32 }
複製程式碼

說明:

  • 該介面指定了呼叫遠端服務的方法的基本路徑與引數以及返回值等
  • 路徑都是相對路徑,相對於setEndpoint("http://localhost:8081")指定的路徑
  • 方式有@GET/@POST/@PUT/@DELETE等
  • 傳遞引數在get方式中可以直接將引數連到URL上去
  • 傳遞引數使用@Query(服務被呼叫方使用@RequestParam接收),路徑中的傳遞引數使用@PathRestful風格),還可以直接傳遞一個物件@Body(服務被呼叫方使用@RequestBody接收),引數在請求頭中@Header(服務被呼叫方使用@RequestHeader接收)
  • 依舊要建一個Hotel類,最好與myboot2中的相同,不同也沒關係

2.4、HotelAPIConfig.java

相關推薦

springboot + retrofit平臺介面呼叫

retrofit:一套RESTful架構的Android(Java)客戶端實現。 好處: 基於註解提供JSON to POJO,POJO to JSON,網路請求(POST,GET,PUT,DELETE等)封裝可以看做是對HttpClient的再次封裝 1、為了做測試,建立了一個新的springboot

展示功能小程式後期更新後臺介面呼叫

下拉列表: 展開前 展開後   //.wxml檔案 <view class="page"> <view class="page_bd"> <view class="body_head" bindtap="showitem

Android HTTP通訊封裝包括WebService的呼叫

第一個物件: 該物件是呼叫WebService用的一個物件基類。 package Entity; import com.google.gson.Gson; import org.json.JSONObject; import java.lang.reflect.Field; impor

eclipse oxygen版本 建立SpringBoot專案使用sts外掛建立

1,首先eclipse需要先安裝sts外掛 2,建立springboot專案, 2.1,new——》other——》spring boot next 2.2,可能會出現下面的錯誤提示,該錯誤時連結超時,以下有解決辦法 2.3,解決上面的錯誤(設定連結超時時間更長一些)

spring cloud 入門【Eureka註冊中心,微服務之間服務呼叫方式二FeignClient進行服務呼叫

FeignClient 支隊服務消費方進行修改,服務提供方不需要修改   還是對  User 進行修改  UserApplication 中新增  @EnableFeignClients UserApplication 程式碼如下: pac

Ubuntu 18.04 軟體源修改成國內源檔案或介面形式

輸入命令修改sources.list檔案: sudo gedit /etc/apt/sources.list 在檔案最前面新增以下條目(操作前請做好相應備份): #清華 deb https://mirrors.tuna.tsinghua.edu.cn/

Linux 網絡卡驅動學習網路驅動介面小結

【摘要】前文我們分析了一個虛擬硬體的網路驅動例子,從中我們看到了網路裝置的一些介面,其實網路裝置驅動和塊裝置驅動的功能比較類似,都是傳送和接收資料包(資料請求)。當然它們實際是有很多不同的。 1、引言 首先塊裝置在/dev目錄下有裝置節點,而網路裝置沒有

Springboot-----Springboot入門各種常見問題解決

本身搭建springboot專案是一個很easy的事,但親手搭建的時候,踩了很多坑,記錄一下。 一.構建一個springboot的maven專案。 訪問Spring 的網址https://start.spring.io/ 填寫Artifact為專案名稱。 二.確定本地的mave

hdu1997 漢諾塔VIIDFS遞迴呼叫

題目詳情:傳送門        我都要做鬱悶了,邏輯一直沒錯,但是最後一組答案就是過不了。看了幾個小時,終於發現問題所在了。我把陣列初始化 memset() 函式,放在了自定義函式 Input 中,使用形參的sizeof()作為地址的長度,結果陣列沒有初始化成功,導致悲劇的

騰訊AI開放平臺介面呼叫指南

最近無意發現騰訊AI開放平臺上提供了大量好玩的人工智慧雲服務,而且是完全免費的。只需要用QQ號登入即可。這麼好的東西,作為一個程式設計師,當然要試試了! 從上圖可以看出騰訊AI開放平臺提供的人工智慧服務主要有自然語言處理,計算機視覺和智慧語音三大類。我當然

介面測試 總結什麼是介面測試

今天被打敗了,竟然有人問我介面測試怎麼測,本文轉載自(http://blog.csdn.net/jiary5201314/article/details/51429347) 本文主要分為兩個部分:   第一部分:主要從問題出發,引入介面測試的相關內容並與前端測試進行簡

用微信JS SDK實現分享到朋友圈和分享給朋友的功能服務端介面開發

前端呼叫的介面(getInfo.php)如下,通過該介面可以獲取所需的校驗欄位。 <?php require_once "jssdk.php"; $url=isset($_GET['url'])

搭建SpringBoot工程Maven多模組版

一、搭建一個Maven 多模組專案 我們意思一下,假設我們構建的專案就這三個模組 springboot-front web層 springboot-service 業務層 springboot-dao 資料持久層 依賴關係如下: 依賴依賴springboot

物聯網之LoRa開發與應用三Lora人機介面開發

文章要點: 1、TFT液晶屏工作原理 2、TFT液晶屏驅動開發 3、TFT人機介面開發 TFT液晶屏工作原理 內容概要: 1、TFT液晶屏顯示原理 2、1.44寸TFT液晶屏工作原理 3、1.44寸TFT液晶屏硬體設計 TFT液晶屏如何顯示: 顏色深度

java原始碼——對檔案內容的查詢和替換開始寫介面

問題是:“鍵盤輸入檔案的路徑、查詢內容和替換內容,對指定路徑的檔案的內容進行查詢和替換。” 好久沒寫介面了,今天熟悉一下介面的書寫和監聽器操作。 這個問題的本身不是很難,重點應該是檔案處理時的各種可能出現的錯誤進行處理。因此寫程式碼時需要非常細心,並且把錯誤處理到位。 另

8-spring原始碼3.2.18解讀+spring技術內幕IOC容器的依賴注入反射+遞迴呼叫

1、導讀 以上對IOC容器的初始化過程做了詳細的分析,這個初始化過程完成的主要工作是在IOC容器中建立BeanDefinition資料對映。再次過程中並沒有對Bean依賴關係進行注入,接下來將分析一下IOC容器是怎麼樣對Bean的依賴關係進行注入的。 假設當前IOC容器已

【Unity 3D】學習筆記十:GUI Skin圖形使用者介面面板

Unity 學習筆記十 學習資料:《Unity 3D遊戲開發》 宣雨鬆 在這之前的學習的大部分控制元件用來開發遊戲還是太簡陋,為了讓遊戲更具娛樂性和美觀,所以我們就需要學習GUI Skin空間來為遊戲新增色彩。 首先在Project檢視中點選create---->

SQL SERVER根據備份建立一個新庫圖形使用者介面方式

一、知識點 完全備份: 備份全部選中的資料夾,並不依賴檔案的存檔屬性來確定備份那些檔案。(在備份過程中,任何現有的標記都被清除,每個檔案都被標記為已備份,換言之,清除存檔屬性)。完全備份也叫完整備份。 差異備份: 差異備份是針對完全備份:備份上一次的完全備份後發生變化

action動態方法呼叫struts通過ActionName!methodName.action,即通過感嘆號即!訪問某Action的方法,確老是報錯

(struts通過ActionName!methodName.action,即通過感嘆號(即!)訪問某Action的方法,如下所示: http url連結如下: http://127.0.0.1:8080/News/newsAction!findAll.action 上面連

檔案壓縮平臺Linux & 語言C++

哈夫曼樹:根據一系列權值,每次選出其中最小的兩個作為兩個樹節點,把這兩個節點的和作為他們的根節點並把根節點放入這個權值向量中,再次取出其中最小的兩個,構建另外的節點,這樣最後剩下一個節點就是哈夫曼樹的根節點。 哈夫曼樹特點: 權值都放在了葉