BOをカプセル化してDOを継承し、Mybatisカスケードクエリを行うとjackson解析異常が発生する


問題の説明
Mybatisを使用してカスケードクエリを行い、特に一対一、一対多、多対多を行う場合、正規化のために、DOエンティティークラスに直接カプセル化しないでデータベースに属さないエンティティー属性(無視できるが)を持つことが多いため、一般的にカプセル化BOが行われ、BOが直接DOを継承することが多い.ただしMybatisを用いてカスケードクエリを行い、BOを返すデータ型としてjacksonの解析異常(springbootデフォルトのjson解析ツール)が報告される.
エラーメッセージは次のとおりです.
ERROR c.x.e.handler.GlobalExceptionHandler - Type definition error: [simple type, class 
org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectPro
xyImpl]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for 
class 
org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectPro
xyImpl and no properties discovered to create BeanSerializer (to avoid exception, disable 
SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: 
com.xiaoyun.response.ResponseResult["data"]-
>com.xiaoyun.api.bo.ObjectDetailsBO_$$_jvst744_0["handler"])

問題解決
Mybatisの最下位レベルでは、カスケードクエリの処理中にJavaBeanにhandleプロパティが追加され、Jacksonがそのエージェントクラスをシーケンス化すると、対応するgetterが見つからないため、例外が投げ出されます.
解決策:エンティティ・クラスに次の注釈を追加すると解決されます.
@JsonIgnoreProperties(value = "handler")

役割:Jacksonをシーケンス化するときにhandlerプロパティを無視する
添付:@JsonIgnoreおよび@JsonIgnorePropertiesの使用
@JsonIgnore注記は、一部のフィールドを無視するために使用されます.FieldメソッドまたはGetterメソッドで使用できます.Setterメソッドで使用する場合、Filed効果と同じです.
@JsonIgnoreProperties(ignoreUnknown=true)この注記をクラスに書くと、クラスに存在しないフィールドは無視されます.この注記では、無視するフィールドも指定できます.使用方法は次のとおりです.
@JsonIgnoreProperties({"internalId","secretKey"})で指定したフィールドは、シーケンス化および逆シーケンス化されません.