Skip to content

Commit

Permalink
fix : ContextValueFilter field is null, for issue #1090
Browse files Browse the repository at this point in the history
  • Loading branch information
wenshao committed Feb 2, 2023
1 parent d192347 commit a7b182a
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.alibaba.fastjson2.*;
import com.alibaba.fastjson2.codec.FieldInfo;
import com.alibaba.fastjson2.filter.*;
import com.alibaba.fastjson2.util.BeanUtils;
import com.alibaba.fastjson2.util.Fnv;
import com.alibaba.fastjson2.util.TypeUtils;

Expand Down Expand Up @@ -486,6 +487,7 @@ public void writeWithFilter(JSONWriter jsonWriter, Object object, Object fieldNa
FieldWriter fieldWriter = fieldWriters.get(i);

Field field = fieldWriter.field;

if (ignoreNonFieldGetter
&& fieldWriter.method != null
&& (fieldWriter.features & FieldInfo.FIELD_MASK) == 0) {
Expand Down Expand Up @@ -571,6 +573,10 @@ public void writeWithFilter(JSONWriter jsonWriter, Object object, Object fieldNa
}
if (contextValueFilter != null) {
if (beanContext == null) {
if (field == null && fieldWriter.method != null) {
field = BeanUtils.getDeclaredField(objectClass, fieldWriter.fieldName);
}

beanContext = new BeanContext(
objectClass,
fieldWriter.method,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.alibaba.fastjson2.issues_1000;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.filter.BeanContext;
import com.alibaba.fastjson2.filter.ContextValueFilter;
import org.junit.jupiter.api.Test;

import java.lang.reflect.Field;
import java.util.concurrent.atomic.AtomicReference;

import static org.junit.jupiter.api.Assertions.assertNotNull;

public class Issue1090 {
@Test
public void test() {
Bean bean = new Bean();
bean.id = 1001;

AtomicReference<Field> fieldRef = new AtomicReference<>();

ContextValueFilter filter = new ContextValueFilter() {
@Override
public Object process(BeanContext context, Object object, String name, Object value) {
fieldRef.set(context.getField());
return value;
}
};

JSON.toJSONString(bean, filter);

assertNotNull(fieldRef.get());
}

public static class Bean {
private int id;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}
}
}

0 comments on commit a7b182a

Please # to comment.