[alibaba/fastjson]在对象属性上使用@JSONField(format= "trim"),反序列化存在问题

2024-09-20 608 views
5

@ApiModelProperty(value= "支出类合同类型") @JSONField(format= "trim") private String contractType;

当前端入参是:"contractType": null 这个时候会报 JSON parse error: null; nested exception is com.alibaba.fastjson.JSONException

回答

7

1.2.77_preview_01

package com.alibaba.json.bvt.issue_3400;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import org.junit.Test;

public class Issue3426 {
    private static final String test_str = "{\"contractType\": null}";

    @Test
    public void test_1() {
        System.out.println(JSON.parseObject(test_str, issue3429_a.class));
    }
}

class issue3426_a {
    //TODO @ApiModelProperty(value= "支出类合同类型")
    @JSONField(format = "trim")
    private String contractType;
}

输出为

com.alibaba.json.bvt.issue_3400.issue3426_a@2c6a3f77

无异常.

1

@yuanyong1014 能提供下最小复现demo吗

0

问题可能在后续的版本已经修复了。 从表象上看,可能是因为 contractType 为Null时,结果调用了 format定义的trim方法导致的空指针。

3

@Certseeds @harkue @wenshao

上边这个例子contractType没有提供get/set方法,你这个无法被反序列化。 你提供get/set方法就会抛异常了。

我使用的1.2.78版本,仍然有此问题。

问题代码在:com.alibaba.fastjson.parser.deserializer.FieldDeserializer#setValue(java.lang.Object, java.lang.Object),走到第二个分支了。没有走第一直分支