Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] 针对Record类,boolean类型,JSON.toJSONString()报错 #3090

Open
ityangkai-coder opened this issue Oct 10, 2024 · 0 comments
Open
Labels
bug Something isn't working

Comments

@ityangkai-coder
Copy link

问题描述

针对Record类,boolean类型,JSON.toJSONString()报错

环境信息

请填写以下信息:

  • OS信息: Macos
  • JDK信息: java21
  • 版本信息:2.0.53

重现步骤

 public record GoodUpdatedCheck(boolean isUpgrade, boolean isDowngrade, boolean isChangeSubscriptionGood) {
      // boolean会报错
        public static void main(String[] args) {
            GoodUpdatedCheck goodUpdatedCheck = new GoodUpdatedCheck(true, true, true);
            System.out.println(JSON.toJSONString(goodUpdatedCheck));
        }
    }
   
 public record GoodUpdatedCheck2(Boolean isUpgrade, Boolean isDowngrade, Boolean isChangeSubscriptionGood) {
    // Boolean不会报错
        public static void main(String[] args) {
            GoodUpdatedCheck2 goodUpdatedCheck = new GoodUpdatedCheck2(true, true, true);
            System.out.println(JSON.toJSONString(goodUpdatedCheck));
        }
    }
    

期待的正确结果

正确JSON格式化

相关日志输出

*com.truckerpath.vip.utils.SubscriptionGoodsUtil$GoodUpdatedCheck
Exception in thread "main" java.lang.UnsupportedOperationException: can't get field offset on a record class: private final boolean *.SubscriptionGoodsUtil$GoodUpdatedCheck.isChangeSubscriptionGood
at jdk.unsupported/sun.misc.Unsafe.objectFieldOffset(Unsafe.java:655)
at com.alibaba.fastjson2.writer.FieldWriter.(FieldWriter.java:118)
at com.alibaba.fastjson2.writer.FieldWriterBoolean.(FieldWriterBoolean.java:32)
at com.alibaba.fastjson2.writer.FieldWriterBoolMethod.(FieldWriterBoolMethod.java:21)
at com.alibaba.fastjson2.writer.ObjectWriterCreator.createFieldWriter(ObjectWriterCreator.java:933)
at com.alibaba.fastjson2.writer.ObjectWriterCreatorASM.lambda$createObjectWriter$1(ObjectWriterCreatorASM.java:330)
at com.alibaba.fastjson2.util.BeanUtils.getters(BeanUtils.java:1040)
at com.alibaba.fastjson2.writer.ObjectWriterCreatorASM.createObjectWriter(ObjectWriterCreatorASM.java:237)
at com.alibaba.fastjson2.writer.ObjectWriterProvider.getObjectWriterInternal(ObjectWriterProvider.java:462)
at com.alibaba.fastjson2.writer.ObjectWriterProvider.getObjectWriter(ObjectWriterProvider.java:340)
at com.alibaba.fastjson2.JSON.toJSONString(JSON.java:3021)
at com.truckerpath.vip.utils.SubscriptionGoodsUtil$GoodUpdatedCheck.main(SubscriptionGoodsUtil.java:101)
*

附加信息

报错位置:当boolean类型时,field != null, 所以会进行UNSAFE.objectFieldOffset(field); 由于class为record类,所以导致报错
QQ_1728531130761
QQ_1728531298202

而Boolean类型,field == null,不会使用UNSAFE.objectFieldOffset(field);所以可以正常进行格式化,具体feild入值,针对boolean类型有特殊的判断,不知道为了解决什么问题
QQ_1728531438143

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant