zoukankan      html  css  js  c++  java
  • 第十六章 springboot + OKhttp + String.format

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

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

    1、myboot2项目

    1.1、application.properties

    1 server.port=8081
    View Code

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

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

    1.2、pom.xml

    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.3、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.4、com.xxx.secondboot.web.HotelController

     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

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

    2、myboot1项目

    2.1、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.2、application-dev.properties

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

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

    2.3、application.properties

    1 spring.profiles.active=dev
    View Code

    2.4、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.5、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.6、logback.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <configuration>
     3     <include resource="org/springframework/boot/logging/logback/base.xml" />
     4     <!-- 1、logger 
     5          属性: 
     6             1)name:用来指定受此logger约束的某一个包或者具体的某一个类 
     7             2)level:用来设置打印级别,大小写无关(最常用的几种):DEBUG, INFO, WARN, ERROR 
     8          2、 
     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
  • 相关阅读:
    (转载)Linux定时任务cron配置
    (转载)PHP源代码分析- tick(s)
    (转载)PCNTL函数族--PHP多进程编程
    org.apache.hadoop.conf-Configured
    org.apache.hadoop.conf-Configuration
    org.apache.hadoop.conf-Configurable
    源码-hadoop1.1.0-core-org.apache.hadoop.classification
    源码-hadoop1.1.0-core-org.apache.hadoop
    作为开始
    测试一下
  • 原文地址:https://www.cnblogs.com/java-zhao/p/5475350.html
Copyright © 2011-2022 走看看