模拟浏览器向服务器发送请求四种方式:

看本章之前可以先看看第七章 springboot + retrofit

1、myboot2项目

1.1、application.properties

 server.port=8081

注意:指定服务器启动端口的有三种方式

  • 在application.properties文件中配置server.port = xxx(xxx为端口,eg.8081)(最推荐)
  • 启动类实现EmbeddedServletContainerCustomizer接口,并重写其方法,参考第七章 springboot + retrofit
  • 打好jar后,"java -jar xx.jar --server.port=8081"

1.2、pom.xml

         <!-- import lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.8</version>
<scope>provided</scope>
</dependency>

1.3、com.xxx.secondboot.domain.Hotel

 package com.xxx.secondboot.domain;

 import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter; @Getter @Setter
@AllArgsConstructor @NoArgsConstructor
public class Hotel {
private int id;
private String hotelname;
}

1.4、com.xxx.secondboot.web.HotelController

 @RestController
@RequestMapping("/hotel")
@Api("HotelController相关api")
public class HotelController { @ApiOperation("获取酒店Hotel信息:getHotelInfo")
@RequestMapping(value="/getHotelInfo",method=RequestMethod.GET)
public Hotel getHotelInfo(@RequestParam("id") int id, @RequestParam("name") String name) {
return new Hotel(id, name);
}
}

说明:上边的接口,就是准备被调用的接口。

2、myboot1项目

2.1、pom.xml

         <!-- 引入okhttp -->
<dependency>
<groupId>com.squareup.okhttp</groupId>
<artifactId>okhttp</artifactId>
<version>2.7.5</version>
</dependency>

2.2、application-dev.properties

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

注意:这里使用了String.format()特性,使用指定符号作为占位符进行占位。

2.3、application.properties

 spring.profiles.active=dev

2.4、com.xxx.firstboot.config.OkHttpClientConfig

 package com.xxx.firstboot.config;

 import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import com.squareup.okhttp.OkHttpClient; @Configuration
public class OkHttpClientConfig { @Bean
public OkHttpClient okHttpClient(){
return new OkHttpClient();
}
}

说明:建立OkHttpClient单例。

2.5、com.xxx.firstboot.web.AddressController

     @RequestMapping(value = "/testokhttp", method = RequestMethod.GET)
public String testokhttp(@RequestParam("id") int id, @RequestParam("name") String name) {
String url = String.format(HOTEL_URL, id, name);
try {
Request request = new Request.Builder().url(url).build();
Response response = okHttpClient.newCall(request).execute();
String result = response.body().string();
LOGGER.debug("testokhttp成功,url:'{}',result:'{}'", url, result);
return result;
} catch (IOException e) {
LOGGER.error("testokhttp失败,url:'{}'", url);
e.printStackTrace();
}
return "";
}

说明:这里只是同步get方式,关于okhttp的其他用法,参考:http://www.cnblogs.com/ct2011/p/4001708.html

补充:其实上边这种写法还是有问题的,忘记关闭资源,最终代码如下:

     @RequestMapping(value = "/testokhttp", method = RequestMethod.GET)
public String testokhttp(@RequestParam("id") int id, @RequestParam("name") String name) {
String url = String.format(HOTEL_URL, id, name);
Response response = null;
try {
Request request = new Request.Builder().url(url).build();
response = okHttpClient.newCall(request).execute();
String result = response.body().string();
LOGGER.debug("testokhttp成功,url:'{}',result:'{}'", url, result);
return result;
} catch (IOException e) {
LOGGER.error("testokhttp失败,url:'{}'", url);
e.printStackTrace();
}finally {
if(response.body()!=null){
try {
response.body().close();//一定要关闭,不然会泄露资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "";
}

2.6、logback.xml

 <?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<!-- 1、logger
属性:
1)name:用来指定受此logger约束的某一个包或者具体的某一个类
2)level:用来设置打印级别,大小写无关(最常用的几种):DEBUG, INFO, WARN, ERROR
2、
-->
<!-- <logger name="org.springframework.web" level="DEBUG" /> --> <!-- mybatis日志打印 -->
<!-- <logger name="com.ibatis" level="DEBUG" /> -->
<!-- <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" /> -->
<!-- <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" /> -->
<!-- <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" /> --> <!-- <logger name="java.sql.Connection" level="DEBUG" /> -->
<!-- <logger name="java.sql.Statement" level="DEBUG" /> -->
<!-- <logger name="java.sql.PreparedStatement" level="DEBUG" /> -->
<!-- 这一句至关重要如果没有,就无法输出sql语句 -->
<logger name="com.xxx.firstboot.mapper" level="DEBUG"></logger>
<logger name="com.xxx.firstboot.web" level="DEBUG"></logger>
</configuration>

最新文章

  1. WPF绘制矢量图形模糊的问题
  2. 【Linux】浅谈段页式内存管理
  3. [Xamarin] 關於發出Notification 的大小事 (转帖)
  4. 操作sqlserver数据库常用的三个方法
  5. jquery通过ajax方法获取json数据不执行success
  6. 大脑皮层是如何工作的 《人工智能的未来》(&lt;On intelligence&gt;)读书笔记
  7. js判断是否是数字通用写法
  8. MEF初体验之七:Using Catalogs
  9. 使用Lucene.net+盘古分词实现搜索查询
  10. mybatis_SQL映射(3)
  11. Windows Server 2016-图形化新建域用户(一)
  12. eclipse集成testng插件
  13. Linux-逻辑卷LVM
  14. jmeter--001.介绍、下载与安装
  15. Mysql学习之基础
  16. 发现了一个比较有意思的url参数
  17. iptables(2)
  18. eMMC基础技术7:Bus Speed Modes
  19. 数组Array的一些方法
  20. wewqe

热门文章

  1. thinkphp中导入和使用阿里云OSSsdk
  2. 【基础知识】ASP.NET[基础二(aspx)]
  3. 2018haoi总结
  4. 1 Scala基本概念 +IDE
  5. hdu 5251 包围点集最小矩形 ***
  6. 【10.17校内测试】【二进制数位DP】【博弈论/预处理】【玄学(?)DP】
  7. 单源最短路径-迪杰斯特拉算法(Dijkstra&#39;s algorithm)
  8. 最小生成树-克鲁斯卡尔算法(kruskal&#39;s algorithm)实现
  9. Redux-saga学习笔记
  10. 安装wp8sdk 当前系统时钟或签名文件中的时间戳验证时要求的证书不在有效期内。