Open xiongzegang opened 1 year ago
这个是java bean规范,java.beans.Introspector#decapitalize方法的行为一致。你可以通过JSONField定制输出的字段名:
@Test
public void test() {
Bean bean = new Bean();
bean.age = 20;
bean.oAuthName = "xxx";
String str = JSON.toJSONString(bean);
assertEquals("{\"age\":20,\"oAuthName\":\"xxx\"}", str);
}
@Data
static class Bean {
@JSONField(name = "oAuthName")
private String oAuthName;
private Integer age;
}
这个是java bean规范,java.beans.Introspector#decapitalize方法的行为一致。你可以通过JSONField定制输出的字段名:
@Test public void test() { Bean bean = new Bean(); bean.age = 20; bean.oAuthName = "xxx"; String str = JSON.toJSONString(bean); assertEquals("{\"age\":20,\"oAuthName\":\"xxx\"}", str); } @Data static class Bean { @JSONField(name = "oAuthName") private String oAuthName; private Integer age; }
你好,这是我从fastjson切换到fastjson2发现的问题,之前使用fastjson序列化spring oauth2 token,发现的这种不同之处,因为被序列化的对象的spring框架的类,我不能去指定这个注解。这算是fastjson2和fastjson不兼容的地方吧
https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson/2.0.22-SNAPSHOT/ 问题已经修复,使用兼容API保持原来的命名风格输出,请帮忙用2.0.22-SNAPSHOT版本验证,2.0.22版本预计在元旦期间发布
@wenshao 你好,使用https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson/2.0.22-SNAPSHOT/和相同的测试代码依然没有得到fastjson原来的命名风格输出。
@xiongzegang 这样用:
@Test
public void test1() {
ObjectWriterProvider provider = new ObjectWriterProvider(PropertyNamingStrategy.CamelCase1x);
Bean1 bean = new Bean1();
bean.age = 20;
bean.oAuthName = "xxx";
String str = JSON.toJSONString(bean, JSONFactory.createWriteContext(provider));
assertEquals("{\"age\":20,\"oAuthName\":\"xxx\"}", str);
}
@Data
static class Bean1 {
private String oAuthName;
private Integer age;
}
版本2.0.21 重现代码: @Data public class MyUser {
}