学习目标:
异常处理及解决方法(查找资料,运行success):
- java.lang.NoClassDefFoundError: javax/servlet/ServletOutputStream
- SSLException: Unrecognized SSL message, plaintext connection?
- 出现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
总结
附:学习记录,方便查看