<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.67</version>
</dependency>
问题
发现了个fastjson转换的bug。示例代码如下:
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* @author superlee
* @since 2020-05-22
*/
public class TestStatus {
public static void main(String[] args) throws JsonProcessingException {
Son son = new TestStatus.Son();
son.setStatus("status");
ObjectMapper objectMapper = new ObjectMapper();
System.out.println("======>fastjson<======");
System.out.println(JSON.toJSONString(son));
System.out.println("======>jackson<======");
System.out.println(objectMapper.writeValueAsString(son));
}
static class Parent {
private String _status;
public String get_status() {
return _status;
}
public void set_status(String _status) {
this._status = _status;
}
}
static class Son extends Parent {
private String status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
}
输出如下
======>fastjson<======
{}
======>jackson<======
{"_status":null,"status":"status"}
目前找到的原因是反射获取son对象getStatus方法时,获取错误,取到了父类get_status方法。导致获取值的时候返回为null。
对象的status字段是有值的,但是在fieldSerializer.getPropertyValueDirect(object)
的时候返回的是null,
反射获取status的get方法时,取到了父类get_status方法。导致返回位null。