异常处理解决1

学习目标:

异常处理及解决方法(查找资料,运行success):

  1. java.lang.NoClassDefFoundError: javax/servlet/ServletOutputStream
  2. SSLException: Unrecognized SSL message, plaintext connection?
  3. 出现error:"HV000030: No validator could be found for constraint ‘javax.validation.constraints.NotBlank’ validating type ‘java.lang.Long’. Check configuration for ‘orderNum’ "

学习内容:

异常1

  • 问题描述
java.lang.NoClassDefFoundError: javax/servlet/ServletOutputStream
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
	at java.lang.Class.getMethod0(Class.java:3018)
	at java.lang.Class.getMethod(Class.java:1784)
	at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletOutputStream
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 7 more
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" 
  • 异常场景
public static void main(String[] args) {
        // 随机生成验证码
        String text = "hello world!";
        System.out.println("随机码: " + text);
        // 二维码图片的宽
        int width = 100;
        // 二维码图片的高
        int height = 100;
        // 二维码图片的格式
        String format = "png";

        try {
            // 生成二维码图片,并返回图片路径
            String pathName = generateQRCode(text, width, height, format, "D:/new.png");
            System.out.println("生成二维码的图片路径: " + pathName);

            String content = parseQRCode(pathName);
            System.out.println("解析出二维码的图片的内容为: " + content);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

在执行main方法时,执行异常。

  • 异常处理

当遇到这个异常的时候,首先判断是缺少了包,然后就在maven官网搜索 javax/servlet/ServletOutputStream的包进行导入

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
<!--            <scope>provided</scope>-->
        </dependency>

可是导入后发现还是不行,依然报错,几番周折,也许开始不认识下面这个标签吧,就尝试的删除了下面的这个标签,然后就可以了
provided
provided适合在编译和测试的环境,他和compile很接近,但是provide仅仅需要在编译和测试阶段,同样provide将不会被打包到lib目录下。
结论:
解决方法:现在能给出的判断结果是,在使用main方法进行测试的时候,缺少javax/servlet/ServletOutputStream包,然后进行导入后,忘记去掉provided这个标签,因为main方法进行测试所处于的环境应该不属于编译或者测试环境.

<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
  • 注意

在使用main方法测试完成后记得加上provided标签,或者将pom文件中引入的这个包给注释掉,否则tomcat插件不能启动,报的异常是
Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer

Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]

异常2

  • 问题描述

cn.hutool.core.io.IORuntimeException: SSLException: Unrecognized SSL message, plaintext connection?

  • 异常场景
HashMap<String, Object> paramMap = new HashMap<>();
       paramMap.put("wd", "HuToolsnb");
       String result= HttpUtil.get("https://124.1.1.1:9420");
       System.out.println(result);

在进行post或get请求时,输入的URL为https://

  • 异常原因
    对方提供的不是https服务的端口

异常3

HV000030: No validator could be found for constraint ‘javax.validation.constraints.NotBlank’ validating type ‘java.lang.Long’. Check configuration for ‘orderNum’

使用的是import javax.validation.constraints.NotBlank;
Long orderNum属性上加了@NotBlank出现报错
@NotNull(message = "显示顺序不能为空")‘
public Long getOrderNum() { return orderNum; }
说明:
经检验之后发现错误是注解用的不对对于Integer、Long类型的属性值,用的注解应该是用@NotNull,不能用@NotBlank或者@NotEmpty。

@NotEmpty 用在集合类上面
@NotBlank 用在String上面
@NotNull 用在基本类型上

常用的校验注解

@AssertFalse 校验false
@AssertTrue 校验true
@DecimalMax(value=,inclusive=) 小于等于value,
inclusive=true,是小于等于
@DecimalMin(value=,inclusive=) 与上类似
@Max(value=) 小于等于value
@Min(value=) 大于等于value
@NotNull  检查Null
@Past  检查日期
@Pattern(regex=,flag=)  正则
@Size(min=, max=)  字符串,集合,map限制大小
@Validate 对po实体类进行校验

学习时间:

2021-07-05、2021-07-06、2021-07-30


总结

附:学习记录,方便查看

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

slowly_jin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值