java.lang.AssertionError: JSON path "$.data" Expected: null but: was "unknown_legacy_xyz" at com.etotem.cfc.integration.controller.DimensionRegistryMapContractTest.map_unknownLegacy_returnsNullData(DimensionRegistryMapContractTest.java:76) Preparing: SELECT id,openid,unionid,family_id,role,roles,nickname,avatar,password,id_card,real_name,phone,session_key,birthday,birth_hour,gender,total_points,teacher_family_ids,teacher_no,teacher_photo,certificate_image,teacher_status,teacher_reject_reason,address,province,city,district,street,ethnicity,blood_type,highest_education,marital_status,hobbies,diet_preferences,family_role,vendor_type,vendor_status,vendor_reject_reason,show_to_family,mascot,portrait_prompt,is_family_admin,is_child,vendor_info,referrer_id,family_inviter_id,referral_code,member_level,member_expire_time,total_consumption,upgrade_from_consumption,direct_count,indirect_count,total_commission_earned,butler_status,butler_info,butler_approved_at,nutritionist_status,nutritionist_reject_reason,article_admin_status,activity_provider_status,created_at,updated_at,deleted FROM users WHERE id=? AND deleted=0 2026-11-06 02:23:05.640 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : ==> Parameters: -1(Long) 2026-11-06 02:23:05.641 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : <== Total: 0 2026-11-06 02:23:05.643 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : ==> Preparing: SELECT id,openid,unionid,family_id,role,roles,nickname,avatar,password,id_card,real_name,phone,session_key,birthday,birth_hour,gender,total_points,teacher_family_ids,teacher_no,teacher_photo,certificate_image,teacher_status,teacher_reject_reason,address,province,city,district,street,ethnicity,blood_type,highest_education,marital_status,hobbies,diet_preferences,family_role,vendor_type,vendor_status,vendor_reject_reason,show_to_family,mascot,portrait_prompt,is_family_admin,is_child,vendor_info,referrer_id,family_inviter_id,referral_code,member_level,member_expire_time,total_consumption,upgrade_from_consumption,direct_count,indirect_count,total_commission_earned,butler_status,butler_info,butler_approved_at,nutritionist_status,nutritionist_reject_reason,article_admin_status,activity_provider_status,created_at,updated_at,deleted FROM users WHERE id=? AND deleted=0 2026-11-06 02:23:05.643 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : ==> Parameters: -1(Long) 2026-11-06 02:23:05.644 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : <== Total: 0 2026-11-06 02:23:05.645 DEBUG 17028 --- [ main] c.e.c.m.UserOperationLogMapper.insert : ==> Preparing: INSERT INTO user_operation_logs ( user_id, operation_type, description, request_path, request_method, response_status, client_ip, created_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) 2026-11-06 02:23:05.645 DEBUG 17028 --- [ main] c.e.c.m.UserOperationLogMapper.insert : ==> Parameters: -1(Long), get(String), GET /api/dimension-registry/map(String), /api/dimension-registry/map(String), GET(String), 200(Integer), 127.0.0.1(String), 2026-11-06 02:23:05.643(Timestamp) 2026-11-06 02:23:05.646 DEBUG 17028 --- [ main] c.e.c.m.UserOperationLogMapper.insert : <== Updates: 1 MockHttpServletRequest: HTTP Method = GET Request URI = /api/dimension-registry/map Parameters = {legacy=[unknown_legacy_xyz]} Headers = [] Body = null Session Attrs = {} Handler: Type = com.etotem.cfc.controller.admin.DimensionRegistryController Method = com.etotem.cfc.controller.admin.DimensionRegistryController#map(String) Async: Async started = false Async result = null Resolved Exception: Type = null ModelAndView: View name = null View = null Model = null FlashMap: Attributes = null MockHttpServletResponse: Status = 200 Error message = null Headers = [Content-Security-Policy:"default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; connect-src 'self' http://localhost:* https://*; font-src 'self' data:;", Referrer-Policy:"no-referrer", Permissions-Policy:"geolocation=(), microphone=(), camera=()", Access-Control-Allow-Private-Network:"true", Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers", Content-Type:"application/json", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"DENY"] Content type = application/json Body = {"code":200,"message":"success","data":"unknown_legacy_xyz"} Forwarded URL = null Redirected URL = null Cookies = [] ]]> java.lang.AssertionError: JSON path "$.data" Expected: null but: was "" at com.etotem.cfc.integration.controller.DimensionRegistryMapContractTest.map_emptyLegacy_returnsNullData(DimensionRegistryMapContractTest.java:85) Preparing: SELECT id,openid,unionid,family_id,role,roles,nickname,avatar,password,id_card,real_name,phone,session_key,birthday,birth_hour,gender,total_points,teacher_family_ids,teacher_no,teacher_photo,certificate_image,teacher_status,teacher_reject_reason,address,province,city,district,street,ethnicity,blood_type,highest_education,marital_status,hobbies,diet_preferences,family_role,vendor_type,vendor_status,vendor_reject_reason,show_to_family,mascot,portrait_prompt,is_family_admin,is_child,vendor_info,referrer_id,family_inviter_id,referral_code,member_level,member_expire_time,total_consumption,upgrade_from_consumption,direct_count,indirect_count,total_commission_earned,butler_status,butler_info,butler_approved_at,nutritionist_status,nutritionist_reject_reason,article_admin_status,activity_provider_status,created_at,updated_at,deleted FROM users WHERE id=? AND deleted=0 2026-11-06 02:23:05.695 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : ==> Parameters: -1(Long) 2026-11-06 02:23:05.696 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : <== Total: 0 2026-11-06 02:23:05.698 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : ==> Preparing: SELECT id,openid,unionid,family_id,role,roles,nickname,avatar,password,id_card,real_name,phone,session_key,birthday,birth_hour,gender,total_points,teacher_family_ids,teacher_no,teacher_photo,certificate_image,teacher_status,teacher_reject_reason,address,province,city,district,street,ethnicity,blood_type,highest_education,marital_status,hobbies,diet_preferences,family_role,vendor_type,vendor_status,vendor_reject_reason,show_to_family,mascot,portrait_prompt,is_family_admin,is_child,vendor_info,referrer_id,family_inviter_id,referral_code,member_level,member_expire_time,total_consumption,upgrade_from_consumption,direct_count,indirect_count,total_commission_earned,butler_status,butler_info,butler_approved_at,nutritionist_status,nutritionist_reject_reason,article_admin_status,activity_provider_status,created_at,updated_at,deleted FROM users WHERE id=? AND deleted=0 2026-11-06 02:23:05.699 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : ==> Parameters: -1(Long) 2026-11-06 02:23:05.700 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : <== Total: 0 2026-11-06 02:23:05.700 DEBUG 17028 --- [ main] c.e.c.m.UserOperationLogMapper.insert : ==> Preparing: INSERT INTO user_operation_logs ( user_id, operation_type, description, request_path, request_method, response_status, client_ip, created_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) 2026-11-06 02:23:05.700 DEBUG 17028 --- [ main] c.e.c.m.UserOperationLogMapper.insert : ==> Parameters: -1(Long), get(String), GET /api/dimension-registry/map(String), /api/dimension-registry/map(String), GET(String), 200(Integer), 127.0.0.1(String), 2026-11-06 02:23:05.698(Timestamp) 2026-11-06 02:23:05.701 DEBUG 17028 --- [ main] c.e.c.m.UserOperationLogMapper.insert : <== Updates: 1 MockHttpServletRequest: HTTP Method = GET Request URI = /api/dimension-registry/map Parameters = {legacy=[]} Headers = [] Body = null Session Attrs = {} Handler: Type = com.etotem.cfc.controller.admin.DimensionRegistryController Method = com.etotem.cfc.controller.admin.DimensionRegistryController#map(String) Async: Async started = false Async result = null Resolved Exception: Type = null ModelAndView: View name = null View = null Model = null FlashMap: Attributes = null MockHttpServletResponse: Status = 200 Error message = null Headers = [Content-Security-Policy:"default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; connect-src 'self' http://localhost:* https://*; font-src 'self' data:;", Referrer-Policy:"no-referrer", Permissions-Policy:"geolocation=(), microphone=(), camera=()", Access-Control-Allow-Private-Network:"true", Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers", Content-Type:"application/json", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"DENY"] Content type = application/json Body = {"code":200,"message":"success","data":""} Forwarded URL = null Redirected URL = null Cookies = [] ]]> but was:<200> at com.etotem.cfc.integration.controller.DimensionRegistryMapContractTest.map_missingLegacy_returnsBadRequest(DimensionRegistryMapContractTest.java:92) ]]> Preparing: SELECT id,openid,unionid,family_id,role,roles,nickname,avatar,password,id_card,real_name,phone,session_key,birthday,birth_hour,gender,total_points,teacher_family_ids,teacher_no,teacher_photo,certificate_image,teacher_status,teacher_reject_reason,address,province,city,district,street,ethnicity,blood_type,highest_education,marital_status,hobbies,diet_preferences,family_role,vendor_type,vendor_status,vendor_reject_reason,show_to_family,mascot,portrait_prompt,is_family_admin,is_child,vendor_info,referrer_id,family_inviter_id,referral_code,member_level,member_expire_time,total_consumption,upgrade_from_consumption,direct_count,indirect_count,total_commission_earned,butler_status,butler_info,butler_approved_at,nutritionist_status,nutritionist_reject_reason,article_admin_status,activity_provider_status,created_at,updated_at,deleted FROM users WHERE id=? AND deleted=0 2026-11-06 02:23:05.742 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : ==> Parameters: -1(Long) 2026-11-06 02:23:05.743 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : <== Total: 0 2026-11-06 02:23:05.747 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : ==> Preparing: SELECT id,openid,unionid,family_id,role,roles,nickname,avatar,password,id_card,real_name,phone,session_key,birthday,birth_hour,gender,total_points,teacher_family_ids,teacher_no,teacher_photo,certificate_image,teacher_status,teacher_reject_reason,address,province,city,district,street,ethnicity,blood_type,highest_education,marital_status,hobbies,diet_preferences,family_role,vendor_type,vendor_status,vendor_reject_reason,show_to_family,mascot,portrait_prompt,is_family_admin,is_child,vendor_info,referrer_id,family_inviter_id,referral_code,member_level,member_expire_time,total_consumption,upgrade_from_consumption,direct_count,indirect_count,total_commission_earned,butler_status,butler_info,butler_approved_at,nutritionist_status,nutritionist_reject_reason,article_admin_status,activity_provider_status,created_at,updated_at,deleted FROM users WHERE id=? AND deleted=0 2026-11-06 02:23:05.747 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : ==> Parameters: -1(Long) 2026-11-06 02:23:05.749 DEBUG 17028 --- [ main] c.e.cfc.mapper.UserMapper.selectById : <== Total: 0 2026-11-06 02:23:05.749 DEBUG 17028 --- [ main] c.e.c.m.UserOperationLogMapper.insert : ==> Preparing: INSERT INTO user_operation_logs ( user_id, operation_type, description, request_path, request_method, response_status, client_ip, created_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) 2026-11-06 02:23:05.750 DEBUG 17028 --- [ main] c.e.c.m.UserOperationLogMapper.insert : ==> Parameters: -1(Long), get(String), GET /api/dimension-registry/map(String), /api/dimension-registry/map(String), GET(String), 200(Integer), 127.0.0.1(String), 2026-11-06 02:23:05.747(Timestamp) 2026-11-06 02:23:05.751 DEBUG 17028 --- [ main] c.e.c.m.UserOperationLogMapper.insert : <== Updates: 1 MockHttpServletRequest: HTTP Method = GET Request URI = /api/dimension-registry/map Parameters = {} Headers = [] Body = null Session Attrs = {} Handler: Type = com.etotem.cfc.controller.admin.DimensionRegistryController Method = com.etotem.cfc.controller.admin.DimensionRegistryController#map(String) Async: Async started = false Async result = null Resolved Exception: Type = org.springframework.web.bind.MissingServletRequestParameterException ModelAndView: View name = null View = null Model = null FlashMap: Attributes = null MockHttpServletResponse: Status = 200 Error message = null Headers = [Content-Security-Policy:"default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; connect-src 'self' http://localhost:* https://*; font-src 'self' data:;", Referrer-Policy:"no-referrer", Permissions-Policy:"geolocation=(), microphone=(), camera=()", Access-Control-Allow-Private-Network:"true", Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers", Content-Type:"application/json", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"DENY"] Content type = application/json Body = {"code":400,"message":"缺少必填参数: legacy","data":null} Forwarded URL = null Redirected URL = null Cookies = [] ]]>