内部类无法序列化
- Action 向页面传输时,定义 Action 内部的 VO 类,无法传输
- MyBatis 调用 Mapper 接口,传入List 集合,List = subList 的提示如下异常
Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression ‘orderIdList != null and orderIdList.size() > 0’.
Cause: org.apache.ibatis.ognl.MethodFailedException:
Method “size” failed for object [2590]
[java.lang.IllegalAccessException:
Class org.apache.ibatis.ognl.OgnlRuntime can not access a member of class java.util.ArrayList S u b L i s t w i t h m o d i f i e r s " p u b l i c " ] a t o r g . a p a c h e . i b a t i s . s c r i p t i n g . x m l t a g s . O g n l C a c h e . g e t V a l u e ( O g n l C a c h e . j a v a : 50 ) a t o r g . a p a c h e . i b a t i s . s c r i p t i n g . x m l t a g s . E x p r e s s i o n E v a l u a t o r . e v a l u a t e B o o l e a n ( E x p r e s s i o n E v a l u a t o r . j a v a : 32 ) a t o r g . a p a c h e . i b a t i s . s c r i p t i n g . x m l t a g s . I f S q l N o d e . a p p l y ( I f S q l N o d e . j a v a : 33 ) a t o r g . a p a c h e . i b a t i s . s c r i p t i n g . x m l t a g s . C h o o s e S q l N o d e . a p p l y ( C h o o s e S q l N o d e . j a v a : 34 ) a t o r g . a p a c h e . i b a t i s . s c r i p t i n g . x m l t a g s . M i x e d S q l N o d e . a p p l y ( M i x e d S q l N o d e . j a v a : 32 ) a t o r g . a p a c h e . i b a t i s . s c r i p t i n g . x m l t a g s . D y n a m i c S q l S o u r c e . g e t B o u n d S q l ( D y n a m i c S q l S o u r c e . j a v a : 40 ) a t o r g . a p a c h e . i b a t i s . m a p p i n g . M a p p e d S t a t e m e n t . g e t B o u n d S q l ( M a p p e d S t a t e m e n t . j a v a : 278 ) a t o r g . a p a c h e . i b a t i s . e x e c u t o r . C a c h i n g E x e c u t o r . q u e r y ( C a c h i n g E x e c u t o r . j a v a : 75 ) a t o r g . a p a c h e . i b a t i s . s e s s i o n . d e f a u l t s . D e f a u l t S q l S e s s i o n . s e l e c t L i s t ( D e f a u l t S q l S e s s i o n . j a v a : 108 ) a t o r g . a p a c h e . i b a t i s . s e s s i o n . d e f a u l t s . D e f a u l t S q l S e s s i o n . s e l e c t L i s t ( D e f a u l t S q l S e s s i o n . j a v a : 102 ) a t s u n . r e f l e c t . G e n e r a t e d M e t h o d A c c e s s o r 234. i n v o k e ( U n k n o w n S o u r c e ) a t s u n . r e f l e c t . D e l e g a t i n g M e t h o d A c c e s s o r I m p l . i n v o k e ( D e l e g a t i n g M e t h o d A c c e s s o r I m p l . j a v a : 43 ) a t j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( M e t h o d . j a v a : 497 ) a t o r g . m y b a t i s . s p r i n g . S q l S e s s i o n T e m p l a t e SubList with modifiers "public"] at org.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:50) at org.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32) at org.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:33) at org.apache.ibatis.scripting.xmltags.ChooseSqlNode.apply(ChooseSqlNode.java:34) at org.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32) at org.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:40) at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:278) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:75) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102) at sun.reflect.GeneratedMethodAccessor234.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.mybatis.spring.SqlSessionTemplate SubListwithmodifiers"public"]atorg.apache.ibatis.scripting.xmltags.OgnlCache.getValue(OgnlCache.java:50)atorg.apache.ibatis.scripting.xmltags.ExpressionEvaluator.evaluateBoolean(ExpressionEvaluator.java:32)atorg.apache.ibatis.scripting.xmltags.IfSqlNode.apply(IfSqlNode.java:33)atorg.apache.ibatis.scripting.xmltags.ChooseSqlNode.apply(ChooseSqlNode.java:34)atorg.apache.ibatis.scripting.xmltags.MixedSqlNode.apply(MixedSqlNode.java:32)atorg.apache.ibatis.scripting.xmltags.DynamicSqlSource.getBoundSql(DynamicSqlSource.java:40)atorg.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:278)atorg.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:75)atorg.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108)atorg.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102)atsun.reflect.GeneratedMethodAccessor234.invoke(UnknownSource)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)atjava.lang.reflect.Method.invoke(Method.java:497)atorg.mybatis.spring.SqlSessionTemplateSqlSessionInterceptor.invoke(SqlSessionTemplate.java:358)
… 12 more
-
subList 是 ArrayList 的内部类
-
访问权限是 private 而非 public ,一个类文件中,只允许有一个 pulic 访问权限的 类定义
- 向 MyBatis 中传参需要序列化?为什么需要序列化
- 序列化
- 对象是否一定要实现序列化?不是
- 代码实现中存在大量的将外部入参转为内部BO,BO为序列化
- 序列化的作用是对象在客户端与服务端之间的传输与存储
- 作用
https://blog.csdn.net/wy0123/article/details/79345842