alibaba / fastjson2

🚄 FASTJSON2 is a Java JSON library with excellent performance.
Apache License 2.0
3.69k stars 478 forks source link

反序列化,字段解析不出来 #2970

Open qq592304796 opened 2 days ago

qq592304796 commented 2 days ago

问题描述

反序列化,字段解析不出来

环境信息

请填写以下信息:

重现步骤

image 程序运行解析不出来

但是单独写的解析单元测试,是没有问题。我一直以为是编码有问题 image

但是设置【@JSONField(name = "signedMsg")】或者开启【JSONReader.Feature.SupportSmartMatch】是正常的。很奇怪的问题 用fastjson1.x是没有问题的。【signedMsg】跟属性名是可以对上的都解析不出来

    @SneakyThrows
    @Test
    public void gbkParseObjectTest() {
        String footer = "{\"signedMsg\":\"0DF581889549E07BBB2A854D7EC9BA38532C78F47EB53857967B9E366DB4BC1CAE72506F2BD9FDB60A344CA43760354899F7A6E96B778310795C5039A27F6C6E3A77524DB0EC674ADA928EA08B463A2DC0F5B4D22B2D9416730BD3F68AFB556714A43DEAE9463F06B9C8FDE00D6F3598BF59BEDF87A8CF616E42C084F6A91A51DA89A88F23D926A1618E7A18FAE4CA3D2B4B76AF966E89DA1C57BC33D9B2A66AEE40A1689DD0B129D8176EEBD107AE4F4F8431A0F7E3F75AF1245463C7CB144BB9B72A769F0E389C622CC0D6E8AAB0CFDA83212AFAB5BB0C719F35B1F4A79E64464E2B47325520A30BB524BB6EF3DBDE9C00873338E922B1B0826E30D9C59424\"}";
        // 使用指定的UTF-8编码来创建String对象
        // footer = new String(text.getBytes(), Charset.forName("GBK"));
        ResponseFooter responseFooter = JSON.parseObject(footer, ResponseFooter.class);
        Assertions.assertFalse(StringUtils.isBlank(responseFooter.getSignedMsg()));
    }
{
  "signedMsg" : "A81EF804DEE3BAAC38CAA06C35C0D6A7B9E37373598BA8C09B4C449469CB3301F0DA488D3F0190A2121C467B244405CCB234A75895B8015221EF51BCCFCBAA94262EFCAD947E58D2943D18E84C03A91A83EF375921CBCFD436C1C47AD3ACDADA34666D7B344E837903A093DB5B36A3A99D805D26CDAAF17EBBAD4A3415ECDC209B8AEE565B6742097B13512829AA436999326149B462EE7B122F49FCB721AC1FFE84462BCC85AD9A3E0D438F45A1E9A44A1EDA3FEF5ED6EB9B34F4DD1EA7C8A8D3F53DF5195FDAA1C138B6A5AB9051B823403C9CD00B2D687B80B265A5B62AB811C2E2255335317B777B405532C52C3AFC338F61AE30C4E368192FCE05EB4FE2"
}
package com.tilchinalink.tilchinalink_backend.pay.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;

import java.io.Serializable;

/**
 * @author mjl
 * @version v1.0
 * @Package : com.jctopinfo.fleet.pay.model
 * @Description : 响应尾类
 * @Create on : 2024-03-06 18:57
 */
@Data
public class ResponseFooter implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     *  签名信息. 必填项. 长度为2048. Y S 2048
     */
    private String signedMsg = "";

    /**
     * 原响应尾信息
     */
    @JsonIgnore
    private String originalData;

    /**
     * 是否验签成功
     */
    Boolean signSuccess = false;

    /**
     * 未使用
     * @param json
     * @return
     */
    public ResponseFooter fromJson(String json){
        return null;
    }

    /**
     * 未使用
     * @param xml
     * @return
     */
    public ResponseFooter fromXml(String xml){

        return null;
    }
}

期待的正确结果

能正常解析

相关日志输出

请复制并粘贴任何相关的日志输出。

附加信息

如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。

mek1986 commented 1 day ago

根据提供的代码,没法复现问题

mek1986 commented 1 day ago

lombok版本是多少?

qq592304796 commented 1 day ago

lombok版本是多少?

1.18.30
qq592304796 commented 1 day ago

根据提供的代码,没法复现问题

是很奇怪。在实际的业务代码里面就会有这个问题。但是拎出来跑单元测试,是没有问题。因为转换那块都是字节码的操作,具体执行了什么不可见。但是实际确实会有问题

mek1986 commented 1 day ago

看样子,可能是lombok注解没生效,