alibaba / fastjson2

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

[BUG]fastjson2.0.19传入多个ValueFilter的实现类时,只生效最后一个 #1078

Closed MOSLX closed 1 year ago

MOSLX commented 1 year ago

问题描述

项目升级了fastjson2.0.19,配置多个ValueFilter的实现类,目前只会生效最后一个加入的,升级到2.0.23也是有同样的问题。 翻看源码发现JSONWriter.Context.configFilter中后一个ValueFilter的实现类会覆盖前一个。是否是ValueFilter的生效机制出现了变化,如何像fastjson1一样让所有的ValueFilter都生效呢?请大佬帮忙解答一下,多谢!

环境信息

public class Test{

  public static class TestValueFilter1 implements ValueFilter{
    @Override
    public Object apply(Object o, String s, Object o1){
        System.out.println("print test1 value filter");
        return o1;
    }    
  }

 public static class TestValueFilter2 implements ValueFilter{
    @Override
    public Object apply(Object o, String s, Object o1){
        System.out.println("print test2 value filter");
        return o1;
    }    
  }

  public static void main(String[] args){
    Map<String, String> map = new HashMap<>();
    map.put("a", "b");

    ValueFilter[] filters = new ValueFilter[]{new TestValueFilter1(), new TestValueFilter2()};
    System.out.println(JSON.toJSONString(map, filters, JSONWriter.Feature.WriteMapNullValue));
  }
}

期待的正确结果

print test1 value filter print test2 value filter {"a":"b"}

实际日志输出

print test2 value filter {"a":"b"}

wenshao commented 1 year ago

https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.24-SNAPSHOT/ 问题已修复,请用2.0.24-SNAPSHOT版本帮忙验证,2.0.24-SNAPSHOT预计在2月中旬发布。在此之前,你也可以用ValueFilter#compose方法组合两个ValueFilter。

wenshao commented 1 year ago

https://github.com/alibaba/fastjson2/releases/tag/2.0.24 问题已修复,请用新版本