1.問(wèn)題描述:
引入swagger2.X版本后,導(dǎo)致SpringBoot3.1.2啟動(dòng)報(bào)錯(cuò)
2.原因分析:
SpringBoot3.1.2版本依賴于jakarta依賴包,但是Swagger依賴底層應(yīng)用的javax依賴包,所以只要一啟動(dòng)就會(huì)報(bào)錯(cuò)。
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();
}
}
實(shí)體類
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 = "用戶實(shí)體類")
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和帶參構(gòu)造方法 */
}
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);
// 返回?cái)?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: 獲取請(qǐng)求體
* @Date: 20239/18 14:00
* @param User user
* @return map
*/
@PostMapping("/addUser")
@ResponseBody
@Operation(summary = "獲取請(qǐng)求體", description = "獲取請(qǐng)求體")
public Map<String,Object> getUser(@RequestBody @Parameter User user) { // 獲取請(qǐng)求體
Map<String,Object> map = new HashMap();
map.put("user",user);
return map;
}
}
遇到報(bào)錯(cuò):
java.lang.StringIndexOutOfBoundsException: begin 11, end 10, length 10
原因分析:
由于Springdoc?OpenAPI?UI的版本與Spring?Boot的版本不兼容導(dǎo)致的。你正在使用的Springdoc?OpenAPI?UI的版本是2.1.0,而Spring?Boot的版本是3.1.2。這兩個(gè)版本可能存在不兼容的問(wèn)題。
解決辦法:
你可以嘗試將Springdoc?OpenAPI?UI的版本升級(jí)到與Spring?Boot?3.1.2更兼容的版本。你可以在Springdoc的GitHub倉(cāng)庫(kù)的release頁(yè)面查看各個(gè)版本的發(fā)布說(shuō)明,找到一個(gè)與Spring?Boot?3.1.2兼容的版本。
然后,你可以在你的pom.xml文件中更新Springdoc?OpenAPI?UI的版本:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>新的版本號(hào)</version>
</dependency>
https://github.com/springdoc/springdoc-openapi/releases
?
?修改成支持springboot3.1.2的版本2.2.0后,成功~文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-756307.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-756307.html
到了這里,關(guān)于SpringBoot3.1.2 引入Swagger報(bào)錯(cuò)Type javax.servlet.http.HttpServletRequest not present解決辦法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!