当mybatis返回值遇见内部类的问题
背景
使用mybatis返回内部类时,无法点击过去,启动报错
Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.XXX.A$B'.
Cause: java.lang.ClassNotFoundException: Cannot find class: com.XXX.A$B
at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120)
at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149)
at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116)
... 65 common frames omitted
解决方案
如果B类是A类中的内部类:
映射写法:resultType=" com.XXX.A$B">
A类和B类之间用 $表示内外关系,不用的.。
同时,内部类需用内static修饰:
@Data
public class A {
Long value;
String label;
List<B> children;
/**
* 内部类
*/
@Data
public static class B {
Long value;
String label;
List<C> children;
}
/**
* 内部类
*/
@Data
public static class C {
Long value;
String label;
}
}
为什么要用static
如果未加static,启动时不会报错,但是请求方法时会报如下错误:
Caused by: org.apache.ibatis.executor.ExecutorException:
No constructor found in com.XXX.A$B matching
[java.lang.Long, java.lang.String, java.lang.Long, java.lang.String, java.lang.Long, java.lang.String]
未匹配到构造器
静态内部类和内部类区别
Oracle官方的说法:
Terminology: Nested classes are divided into two categories: static and non-static. Nested classes that are declared static are called static nested classes. Non-static nested classes are called inner classes.
从字面上看,一个被称为静态嵌套类,一个被称为内部类。 从字面的角度解释是这样的:
- 什么是嵌套?嵌套就是我跟你没关系,自己可以完全独立存在。
- 什么是内部?内部就是我是你的一部分,我了解你,我知道你的全部,没有你就没有我。(所以内部类对象是以外部类对象存在为前提的)
至于具体的使用场景见官网:
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java的外部类为什么不能使用private和protected进行修饰的讲解
今天小编就为大家分享一篇关于Java的外部类为什么不能使用private和protected进行修饰的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-04-04
解决Springboot项目中很多页面出现Whitelabel Error Page(404)的问题
最近在接手的前后端项目中发现其默认路径不是主机+端口(如:http://localhost:3453/)的形式,很多页面的访问是加了一个层级,只要访问页面就会出现Whitelabel Error Page(404),所以本文给大家提供了解决方案,需要的朋友可以参考下2024-02-02


最新评论