[alibaba/fastjson]设置SerializeConfig不管用

2025-10-28 880 views
1

` @Getter @Setter static class Test { private String phoneNumber; }

@Getter
@Setter
static class TestB {
    private String phoneNumber;
}
  Test test = new Test();
   test.phoneNumber = "xxxx";

    TestB testb = new TestB();
    testb.phoneNumber = "xxxx";

    System.out.println(JSON.toJSONString(test));

SerializeConfig.getGlobalInstance().setPropertyNamingStrategy(PropertyNamingStrategy.SnakeCase); System.out.println(JSON.toJSONString(test)); System.out.println(JSON.toJSONString(testb)); `

希望输出: {"phoneNumber":"xxxx"} {"phone_number":"xxxx"} {"phone_number":"xxxx"} 实际输出: {"phoneNumber":"xxxx"} {"phoneNumber":"xxxx"} {"phone_number":"xxxx"}

追踪代码发现是:序列化一次后,会缓存类和ObjectSerializer。所以会出现这样的问题。

回答

2

最佳实践是先配置,再使用 :)

8

是会出现这个问题,不过没想到特别好的解法办法:),关键是你这个使用场景也比较少见

4

兄弟,第一次解析Test类的时候,就把这个Class的配置信息(Writer) 进缓存了,后续直接get

if (writer == null) {
    // omitted 
    writer = createJavaBeanSerializer(clazz);
    put(clazz, writer);

你这个后置的全局配置,不起作用。除非:

  1. 你全局配置后,手动加上SerializeConfig.getGlobalInstance().clearSerializers();
  2. 让作者加,在set后,clear (逃)