SpringBoot3.1.2 引入Swagger報錯Type javax.servlet.http.HttpServletRequest not present解決辦法
1.問題描述:
引入swagger2.X版本后,導致SpringBoot3.1.2啟動報錯
2.原因分析:
SpringBoot3.1.2版本依賴于jakarta依賴包,但是Swagger依賴底層應用的javax依賴包,所以只要一啟動就會報錯。
3.解決辦法:
pom.xml文件,移除swagger2
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>swagger-bootstrap-ui</artifactId> <version>1.9.0</version> <scope>provided</scope> </dependency>
加入
<dependency> <groupId>io.swagger.core.v3</groupId> <artifactId>swagger-annotations</artifactId> <version>2.2.15</version> </dependency> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.1.0</version> </dependency>
代碼修改
@Api(tags = "") 改為 @Tag(name = "") @ApiModel(value="", description="") 改為 @Schema(name="", description="") @ApiModelProperty(value = "", required = true) 改為 @Schema(name= "", description = "", required = true) @ApiOperation(value = "", notes = "") 改為 @Operation(summary = "", description = "") @ApiParam 改為 @Parameter @ApiResponse(code = 404, message = "") 改為 @ApiResponse(responseCode = "404", description = "")
SwaggerConfig.java
package com.example.lyc.springboot.demo.config; import org.springdoc.core.models.GroupedOpenApi; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SwaggerConfig { @Bean public GroupedOpenApi publicApi() { return GroupedOpenApi.builder() .group("public") .pathsToMatch("/public/**") .build(); } @Bean public GroupedOpenApi privateApi() { return GroupedOpenApi.builder() .group("private") .pathsToMatch("/private/**") .build(); } }
實體類
package com.example.lyc.springboot.demo.entity; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @Data @AllArgsConstructor @NoArgsConstructor @Component @Schema(name = "User", description = "用戶實體類") public class User { @Schema(name = "id", description = "用戶id") private int id; @Schema(name = "userName", description = "用戶名") private String userName; @Schema(name = "password", description = "密碼") private String password; /* 省略get、set和帶參構造方法 */ }
controller類
package com.example.lyc.springboot.demo.controller; import com.example.lyc.springboot.demo.config.MicroServiceUrl; import com.example.lyc.springboot.demo.entity.User; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.beans.factory.annotation.Value; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Slf4j @RestController @RequestMapping("/v1") @Schema(name="", description="") @Tag(name = "JsonController tags") public class JsonController { @Value("${microservice.url.orderUrl}") String orderUrl;// orderUrl變量值 就是application.yml的url.orderUrl值 @Autowired private User user;// 注入 @Autowired MicroServiceUrl MicroServiceUrl; // 注入配置類 @GetMapping("/user") @ResponseBody @Operation(summary = "獲取用戶信息", description = "獲取用戶信息") public User getUser() { user.setId(1); user.setUserName("李銀池"); user.setPassword("123456"); // 日志輸出 log.info("user:{}", user); // 返回 return user; } /*** * @Description: list * @Author: liyinchi * @Date: 2023/9/18 11:17 * @return map */ @GetMapping("/list") @ResponseBody @Operation(summary = "獲取用戶列表", description = "獲取用戶列表") public List<User> getUserList() { List<User> userList = new ArrayList<>(); User user1 = new User(1, "李銀池", "123456"); User user2 = new User(2, "王哈哈", "123456"); userList.add(user1); userList.add(user2); // 日志輸出 log.info("userList:{}", userList); // 返回數(shù)據(jù) return userList; } /*** * @Description: map * @Author: liyinchi * @Date: 2023/9/18 11:17 * @return map */ @GetMapping("/map") @ResponseBody @Operation(summary = "獲取用戶信息", description = "獲取用戶信息") public Map<String, Object> getMap() { Map<String, Object> map = new HashMap<>(3); User user = new User(1, "李銀池", "123456"); map.put("作者信息", user); map.put("github", "https://github.com/liyinchigithub"); map.put("CSDN地址", "https://blog.csdn.net/u013302168"); map.put("粉絲數(shù)量", 252); // 日志輸出 log.info("map:{}", map); // 返回 return map; } /*** * @Description: 讀取application.yml配置文件參數(shù) * @Author: liyinchi * @Date: 2023/9/18 11:17 * @return map */ @GetMapping("/getYMLConfig") @ResponseBody @Operation(summary = "獲取配置文件參數(shù)", description = "獲取配置文件參數(shù)") public Map<String,Object> getYMLConfig() { Map<String,Object> orderUrlList = new HashMap(); orderUrlList.put("microservice url orderUrl",orderUrl); log.info("orderUrl:{}", orderUrl); return orderUrlList; } /*** * @Description: 讀取application.yml配置文件參數(shù) * @Author: liyinchi * @Date: 2023/9/18 11:17 * @return map */ @GetMapping("/getYMLConfigClass") @ResponseBody @Operation(summary = "獲取配置文件參數(shù)", description = "獲取配置文件參數(shù)") public Map<String,Object> getYMLConfigClass() { Map<String,Object> orderUrlList = new HashMap(); orderUrlList.put("orderUrl",MicroServiceUrl.getOrderUrl()); orderUrlList.put("userUrl",MicroServiceUrl.getUserUrl()); orderUrlList.put("shoppingUrl",MicroServiceUrl.getShoppingUrl()); log.info("getYMLConfigClass orderUrlMap:{}", orderUrlList); return orderUrlList; } /*** * @Description: 獲取請求體 * @Date: 20239/18 14:00 * @param User user * @return map */ @PostMapping("/addUser") @ResponseBody @Operation(summary = "獲取請求體", description = "獲取請求體") public Map<String,Object> getUser(@RequestBody @Parameter User user) { // 獲取請求體 Map<String,Object> map = new HashMap(); map.put("user",user); return map; } }
遇到報錯:
java.lang.StringIndexOutOfBoundsException: begin 11, end 10, length 10
原因分析:
由于Springdoc OpenAPI UI的版本與Spring Boot的版本不兼容導致的。你正在使用的Springdoc OpenAPI UI的版本是2.1.0,而Spring Boot的版本是3.1.2。這兩個版本可能存在不兼容的問題。
解決辦法:
你可以嘗試將Springdoc OpenAPI UI的版本升級到與Spring Boot 3.1.2更兼容的版本。你可以在Springdoc的GitHub倉庫的release頁面查看各個版本的發(fā)布說明,找到一個與Spring Boot 3.1.2兼容的版本。
然后,你可以在你的pom.xml文件中更新Springdoc OpenAPI UI的版本:
<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>新的版本號</version> </dependency>
https://github.com/springdoc/springdoc-openapi/releases
修改成支持springboot3.1.2的版本2.2.0后,成功~
以上就是SpringBoot3.1.2 引入Swagger報錯Type javax.servlet.http.HttpServletRequest not present解決辦法的詳細內容,更多關于SpringBoot3.1.2 引入Swagger報錯的資料請關注腳本之家其它相關文章!
- SpringBoot集成WebServlet出現(xiàn)自定義servlet請求失敗的問題解決方案
- SpringBoot里使用Servlet進行請求的實現(xiàn)示例
- springboot掃描自定義的servlet和filter代碼詳解
- Springboot注入成員變量HttpServletRequest的原理分析
- 解決IDEA啟動springboot項目報錯java.lang.ClassNotFoundException:?javax.servlet.ServletContext
- SpringBoot獲取HttpServletRequest的3種方式總結
- Springboot如何添加server.servlet.context-path相關使用
- SpringBoot項目找不到javax.servlet.Filter的問題及解決
- SpringBoot如何切換成其它的嵌入式Servlet容器(Jetty和Undertow)
相關文章
Java各種排序算法匯總(冒泡,選擇,歸并,希爾及堆排序等)
這篇文章主要介紹了Java各種排序算法,以大量實例形式匯總分析了Java常用的各種排序算法,包括冒泡排序、快速排序、堆排序、插入排序、希爾排序、選擇排序、歸并排序等,需要的朋友可以參考下2015-11-11Java CharacterEncodingFilter過濾器的理解和配置案例詳解
這篇文章主要介紹了Java CharacterEncodingFilter過濾器的理解和配置案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-08-08mybatis.type-aliases-package之巨坑的解決
這篇文章主要介紹了mybatis.type-aliases-package之巨坑的解決,具有很好的參考價值,希望對大家有所幫助。2021-09-09java中的FileInputStream三種read()函數(shù)用法
這篇文章主要介紹了java中的FileInputStream三種read()函數(shù)用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12spring學習JdbcTemplate數(shù)據(jù)庫事務管理
這篇文章主要為大家介紹了spring學習JdbcTemplate數(shù)據(jù)庫事務管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05springboot項目使用SchedulingConfigurer實現(xiàn)多個定時任務的案例代碼
這篇文章主要介紹了springboot項目使用SchedulingConfigurer實現(xiàn)多個定時任務,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01