SpringBoot3.1.2 引入Swagger报错Type javax.servlet.http.HttpServletRequest not present解决办法

这篇具有很好参考价值的文章主要介绍了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);
        // 返回数据
        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("粉丝数量", 252);
        // 日志输出
        log.info("map:{}", map);
        // 返回
        return map;
    }

    /***
     * @Description: 读取application.yml配置文件参数
     * @Author: liyinchi
     * @Date: 2023/9/18 11:17
     * @return map
     */
    @GetMapping("/getYMLConfig")
    @ResponseBody
    @Operation(summary = "获取配置文件参数", description = "获取配置文件参数")
    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配置文件参数
     * @Author: liyinchi
     * @Date: 2023/9/18 11:17
     * @return map
     */
    @GetMapping("/getYMLConfigClass")
    @ResponseBody
    @Operation(summary = "获取配置文件参数", description = "获取配置文件参数")
    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

SpringBoot3.1.2 引入Swagger报错Type javax.servlet.http.HttpServletRequest not present解决办法,servlet,http,网络协议

原因分析:

由于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页面查看各个版本的发布说明,找到一个与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 引入Swagger报错Type javax.servlet.http.HttpServletRequest not present解决办法,servlet,http,网络协议

 修改成支持springboot3.1.2的版本2.2.0后,成功~

SpringBoot3.1.2 引入Swagger报错Type javax.servlet.http.HttpServletRequest not present解决办法,servlet,http,网络协议文章来源地址https://www.toymoban.com/news/detail-756307.html

到了这里,关于SpringBoot3.1.2 引入Swagger报错Type javax.servlet.http.HttpServletRequest not present解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot3中Swagger整合knife4j和springdoc的配置说明

      springboot3开始javax包改成了jakarta,而swagger-oas等包中依然使用的是javax所以报错。另外springfox已经过时了,两年没更新了,并且不支持OpenAPI3 标准,而SpringBoot3只支持OpenAPI3规范,所以要迁移到springdoc Knife4J是一款基于Swagger快速生成API文档和调试平台的开源工具,它可以轻松地

    2024年02月04日
    浏览(47)
  • 【springboot3.x 记录】关于Jakarta包无法引入的问题

    最近想将一些项目升级到springboot3.x和java17的时候,发现项目依赖中有Jakarta的包,但是代码标红提示没有相关的类,特此记录一下排查问题和最终解决问题的思路方法 因为之前有创建过 springboot3.x + java17 的项目,也运行正常。所以最近想着将一些旧项目也做一下update,但是不

    2024年02月04日
    浏览(45)
  • 【SpringBoot】SpringBoot引入接口文档生成工具(Swagger+Knife4j)

    由于目前工作项目写的接口越来越多了,为了能够更加方便地优化接口,以及整理接口文档,所以就考虑引入接口文档生成工具。目前的接口文档生成工具被提及较多的是Swagger,经过了引入尝试后,Swagger是比较轻松地就被引入了。但是Swagger页面属实是难以恭维,比较简单但

    2024年01月23日
    浏览(37)
  • 解决vite-plugin-eslint引入type类型报错的问题

    目前看npm包更新时间在一年前,报错原因可能是由于typescript变更导致依赖包package.json不匹配。 看了github上各个大神提出的解决方案,有点看不懂,搞了很久才大致摸索出了,所以分享下 ———————————————— 思路是使用patch-package修改vite-plugin-eslint包源文件

    2024年03月14日
    浏览(82)
  • 勇敢尝鲜之Springboot3大坑-集成Mybatisplus报错:ddlApplicationRunner

    🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 专栏 描述 Java项目实战 介绍Java组件安装、使用;手写框架等 Aws服务器实战 Aws Linux服务器上操作nginx、git、JDK、Vue Jav

    2024年03月15日
    浏览(46)
  • 升级springboot3.2.0报Name for argument of type [java.lang.String] not specified, and parameter name inf

    我这里项目版本是jdk17+springboot3.1.5 升级为jdk21和springboot3.2.0;升级过程总体还是挺顺利的,只是访问应用时老报错: Name for argument of type [java.lang.String] not specified, and parameter name information not found in class file either. 这个错误,是因为spring6.1 调整了参数,而springboot会自动帮助设置

    2024年02月04日
    浏览(45)
  • 解决springboot上传中文文件报错:NoClassDefFoundError: javax/mail/internet/MimeUtility

    1. 背景: springboot版本:2.7.11 前端使用 UnityEngine.WWWForm 进行文件上传 报错信息:org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.lang.NoClassDefFoundError: javax/mail/internet/MimeUtility 2 定位问题: 3. 缺少 javax.mail.internet.MimeUtility 4. pom引入依

    2024年02月12日
    浏览(33)
  • Springboot3整合Mybatis-plus3.5.3报错

    ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 报错以及Bug ✨特色专栏: MySQL学习 🥭本文内容:记录一次Docker与Redis冲突 🖥️个人小站 :个人博客,欢迎大家访问 📚个人知识库: 知识库,

    2024年02月05日
    浏览(49)
  • Springboot整合Swagger2后访问swagger-ui.html 404报错

    在spring boot项目中配置Swagger2,配置好了但是访问确实404,SwaggerConfig中的注入方法也执行了还是访问不到页面。究其原因是MVC没有找到swagger-ui包中的swagger-ui.html文件和css样式、js等文件。 解决⽅案: ⽅案1. 降低Swagger2的使用版本 ⽅案2. 使⽤配置⼀下+swagger-ui.html+指定的css⽬录

    2024年02月11日
    浏览(37)
  • springboot整合websocket后启动报错:javax.websocket.server.ServerContainer not available

    Springboot使用@ServerEndpoint来建立websocket链接。引入依赖。 配置Websocket springboot项目添加websocket依赖后运行测试类报如下错误: 报的错误是创建ServerEndpointExporterBean失败,原因是ServerContainer不可用,那么我们就去看到ServerContainer在ServerEndpointExporter中是怎么注入的。 点进去 Serve

    2024年01月18日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包