ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

No primary or single unique constructor found for interface javax.servlet.http.HttpServletRequest

No primary or single unique constructor found for interface javax.servlet.http.HttpServletRequest

1. 现象说明

执行接口方法,抛出异常No primary or single unique constructor found for interface javax.servlet.http.HttpServletRequest

@GetMapping("/captcha") public void getCaptcha(HttpServletRequest request, HttpServletResponse response) { String captchaText = defaultKaptcha.createText(); log.info("图形验证码:{}", captchaText); // 存储 redisTemplate.opsForValue().set(getCaptchaKey(request), captchaText, CAPTCHA_CODE_EXPIRED, TimeUnit.MILLISECONDS); BufferedImage bufferedImage = defaultKaptcha.createImage(captchaText); try (ServletOutputStream outputStream = response.getOutputStream()) { ImageIO.write(bufferedImage, "jpg", outputStream); outputStream.flush(); } catch (IOException e) { log.error("获取图形验证码异常:", e); } }

2. 解决方法

将所有javax.servlet.*导入语句替换为jakarta.servlet.*

// 错误示例 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // 正确示例 import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse;

3. 原因说明

  • Spring Boot 3+ 基于Jakarta EE 9+,彻底弃用javax.*命名空间,改用jakarta.*
  • 当代码或依赖库仍使用javax.servlet时,Spring无法实例化接口,抛出IllegalStateException
返回列表