第十六章 springboot + OKhttp + String.format

模擬瀏覽器向服務器發送請求四種方式:html

看本章以前能夠先看看第七章 springboot + retrofitjava

一、myboot2項目web

1.一、application.propertiesspring

1 server.port=8081
View Code

注意:指定服務器啓動端口的有三種方式sql

  • 在application.properties文件中配置server.port = xxx(xxx爲端口,eg.8081)(最推薦)
  • 啓動類實現EmbeddedServletContainerCustomizer接口,並重寫其方法,參考第七章 springboot + retrofit
  • 打好jar後,"java -jar xx.jar --server.port=8081"

1.二、pom.xmlapi

1         <!-- import lombok -->
2         <dependency>
3             <groupId>org.projectlombok</groupId>
4             <artifactId>lombok</artifactId>
5             <version>1.16.8</version>
6             <scope>provided</scope>
7         </dependency>
View Code

1.三、com.xxx.secondboot.domain.Hotel瀏覽器

 1 package com.xxx.secondboot.domain;
 2 
 3 import lombok.AllArgsConstructor;
 4 import lombok.Getter;
 5 import lombok.NoArgsConstructor;
 6 import lombok.Setter;
 7 
 8 @Getter @Setter
 9 @AllArgsConstructor @NoArgsConstructor
10 public class Hotel {
11     private int id;
12     private String hotelname;
13 }
View Code

1.四、com.xxx.secondboot.web.HotelControllerspringboot

 1 @RestController
 2 @RequestMapping("/hotel")
 3 @Api("HotelController相關api")
 4 public class HotelController {
 5 
 6     @ApiOperation("獲取酒店Hotel信息:getHotelInfo")
 7     @RequestMapping(value="/getHotelInfo",method=RequestMethod.GET)
 8     public Hotel getHotelInfo(@RequestParam("id") int id, @RequestParam("name") String name) {
 9         return new Hotel(id, name);
10     }
11 }
View Code

說明:上邊的接口,就是準備被調用的接口。服務器

 

二、myboot1項目mybatis

2.一、pom.xml

1         <!-- 引入okhttp -->
2         <dependency>
3             <groupId>com.squareup.okhttp</groupId>
4             <artifactId>okhttp</artifactId>
5             <version>2.7.5</version>
6         </dependency>
View Code

2.二、application-dev.properties

1 service.hotel.url = http://localhost:8081/hotel/getHotelInfo?id=%d&name=%s
View Code

注意:這裏使用了String.format()特性,使用指定符號做爲佔位符進行佔位。

2.三、application.properties

1 spring.profiles.active=dev
View Code

2.四、com.xxx.firstboot.config.OkHttpClientConfig

 1 package com.xxx.firstboot.config;
 2 
 3 import org.springframework.context.annotation.Bean;
 4 import org.springframework.context.annotation.Configuration;
 5 
 6 import com.squareup.okhttp.OkHttpClient;
 7 
 8 @Configuration
 9 public class OkHttpClientConfig {
10 
11     @Bean
12     public OkHttpClient okHttpClient(){
13         return new OkHttpClient();
14     }
15 }
View Code

說明:創建OkHttpClient單例。

2.五、com.xxx.firstboot.web.AddressController

 1     @RequestMapping(value = "/testokhttp", method = RequestMethod.GET)
 2     public String testokhttp(@RequestParam("id") int id, @RequestParam("name") String name) {
 3         String url = String.format(HOTEL_URL, id, name);
 4         try {
 5             Request request = new Request.Builder().url(url).build();
 6             Response response = okHttpClient.newCall(request).execute();
 7             String result = response.body().string();
 8             LOGGER.debug("testokhttp成功,url:'{}',result:'{}'", url, result);
 9             return result;
10         } catch (IOException e) {
11             LOGGER.error("testokhttp失敗,url:'{}'", url);
12             e.printStackTrace();
13         }
14         return "";
15     }
View Code

說明:這裏只是同步get方式,關於okhttp的其餘用法,參考:http://www.cnblogs.com/ct2011/p/4001708.html

補充:其實上邊這種寫法仍是有問題的,忘記關閉資源,最終代碼以下:

 1     @RequestMapping(value = "/testokhttp", method = RequestMethod.GET)
 2     public String testokhttp(@RequestParam("id") int id, @RequestParam("name") String name) {
 3         String url = String.format(HOTEL_URL, id, name);
 4         Response response = null;
 5         try {
 6             Request request = new Request.Builder().url(url).build();
 7             response = okHttpClient.newCall(request).execute();
 8             String result = response.body().string();
 9             LOGGER.debug("testokhttp成功,url:'{}',result:'{}'", url, result);
10             return result;
11         } catch (IOException e) {
12             LOGGER.error("testokhttp失敗,url:'{}'", url);
13             e.printStackTrace();
14         }finally {
15             if(response.body()!=null){
16                 try {
17                     response.body().close();//必定要關閉,否則會泄露資源
18                 } catch (IOException e) {
19                     e.printStackTrace();
20                 }
21             }
22         }
23         return "";
24     }
View Code

2.六、logback.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <configuration>
 3     <include resource="org/springframework/boot/logging/logback/base.xml" />
 4     <!-- 一、logger 
 5          屬性: 
 6             1)name:用來指定受此logger約束的某一個包或者具體的某一個類 
 7             2)level:用來設置打印級別,大小寫無關(最經常使用的幾種):DEBUG, INFO, WARN, ERROR 
 8          二、 
 9     -->
10     <!-- <logger name="org.springframework.web" level="DEBUG" /> -->
11 
12     <!-- mybatis日誌打印 -->
13     <!-- <logger name="com.ibatis" level="DEBUG" /> -->
14     <!-- <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" /> -->
15     <!-- <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" /> -->
16     <!-- <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" /> -->
17     
18     <!-- <logger name="java.sql.Connection" level="DEBUG" /> -->
19     <!-- <logger name="java.sql.Statement" level="DEBUG" /> -->
20     <!-- <logger name="java.sql.PreparedStatement" level="DEBUG" /> -->
21     <!-- 這一句相當重要若是沒有,就沒法輸出sql語句 -->
22     <logger name="com.xxx.firstboot.mapper" level="DEBUG"></logger>
23     <logger name="com.xxx.firstboot.web" level="DEBUG"></logger>
24  </configuration>
View Code
相關文章
相關標籤/搜索