alibaba / fastjson2

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

[BUG]对象字段大小写转换不一致 #810

Open javasunCN opened 2 years ago

javasunCN commented 2 years ago

问题描述

字段首字母小写第二个字母大写,转换后第二个字母变成小写

环境信息

请填写以下信息:

重现步骤

定义对象

  1. springboot配置

    
    @Configuration
    public class JsonCounfig implements WebMvcConfigurer {
    
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //删除jackson的消息转换器
        converters.removeIf(item -> item instanceof MappingJackson2HttpMessageConverter);
        //定义一个converters转换消息的对象
        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        //添加fastjson的配置信息,比如: 是否需要格式化返回的json数据
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setDateFormat(DatePattern.NORM_DATETIME_PATTERN);
    
        //在converter中添加配置信息
        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
        List<MediaType> mediaTypes = new ArrayList<>();
        mediaTypes.add(MediaType.valueOf(MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8"));
        fastJsonHttpMessageConverter.setSupportedMediaTypes(mediaTypes);
        //fastjson转换器必须放在StringHttpMessageConverter之后,不然接口返回值如果是字符串,会多加一对双引号
        converters.add(fastJsonHttpMessageConverter);
    }
    }
 2.定义对象Demo
```java
public class Demo{
   private String eAccId;
}

3.Controller请求返回

"result": {
        "EAccId": "张三"
    }

期待的正确结果

"result": {
        "eAccId": "张三"
    }
wenshao commented 2 years ago

你用了lombok吧,对应的getEAccId方法

China2K commented 1 year ago

遇到同样的问题,是用了lombok,但是1.x为什么是兼容的呢

China2K commented 1 year ago

后续会有版本解决吗?

iv587 commented 1 year ago

使用lombok,字段的第二个字母不是大写,转换后就可以达到期望的字段,反之,则达不到期望字段 @wenshao


import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONWriter;
import lombok.Data;
import lombok.experimental.Accessors;

public class Demo {

    public static void main(String[] args) {
        var dto = new TestDTO().setUId(1).setUserId(123);
        System.out.println(JSON.toJSONString(dto, JSONWriter.Feature.PrettyFormat));
    }

    @Accessors(chain = true)
    @Data
    static class TestDTO {
        /**
         * 第二个字母小写
         */
        private Integer userId;
        /**
         * 第二个字母大写
         */
        private Integer uId;
    }

}

输出结果如图:

image