記一次springcloud一次版本變更的采坑


  最近一直使用springcloud做開發,springcloud是基於springboot框架的一個微服務框架。springboot是對傳統的spring開發的進一步封裝的架構,對於以往很多的配置類的東西我們之需要簡單的添加注解就ok了,大大減少了重復代碼的構建,提升了開發效率。Springcloud對於那些業務模塊化的需求非常友好。各模塊既可以相互獨立,也可以相互依賴。一切通過配置實現。總之就是用了就覺得好。

  任何技術都有不完善的地方,springcloud也不例外,這里我就說一下我在開發中遇到的一個問題。其實這算是對於版本更迭變化不了解帶來的問題。

  之前開發時使用的都是1.5.x版本的,最近有一次在測試一個東西的時候使用了2.x版本的。版本變換,問題來了。

     這里是我自己寫的一個簡單測試接口:

@RestController @RequestMapping("/test") public class Controller { @RequestMapping("/StrTest") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", name = "cfg", dataType = "String", required = true, value = "參數校驗") }) public String getString(String cfg){ System.out.println(cfg); return "success"; } }

  maven依賴:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.12.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <groupId>com.example</groupId>
   <artifactId>demo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>demo</name>
   <description>Demo project for Spring Boot</description>

   <properties>
      <java.version>1.8</java.version>
      <springfox-version>2.7.0</springfox-version>
      <swagger-annotations-version>1.5.13</swagger-annotations-version>
      <spring-cloud.version>Edgware.SR3</spring-cloud.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web-services</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
      <dependency>
         <groupId>io.springfox</groupId>
         <artifactId>springfox-swagger2</artifactId>
         <version>${springfox-version}</version>
         <!--<scope>provided</scope>-->
      </dependency>

      <dependency>
         <groupId>io.springfox</groupId>
         <artifactId>springfox-swagger-ui</artifactId>
         <version>${springfox-version}</version>
         <!--<scope>provided</scope>-->
      </dependency>

   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>

</project>

 

 測試參數:

高版本運行:

Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986,請求中使用了無效的字符,看看參數,就是一個json串啊,使用其他的項目工程測試了一下,沒問題。

   低版本運行:

 

 

  在此仔細一看,原來我在構建工程的時候默認使用的是高版本的springboot,懷疑是版本問題,上網一搜,果然如此:

springboot 2.x版本中,使用的tomcat版本是8.5版本,tomcat8.5對請求url做了限制,查看RFC規范知,url中只允許包含英文字母(a-zA-Z)、數字(0-9)-_.~四個特殊字符以及保留字符( ! * ( ) ; : @ & = + $ , / ? # [ ] ) (26*2+10+4+18=84)84個字符.而我們的請求中出現了{}大括號,所以tomcat報錯.

    以后構建相關項目工程的時候版本選擇一定要謹慎,不然坑的就是自己了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM