FastJson首字母大小写问题

本文介绍使用FastJson将VO类转换成Json字符串时遇到的问题,特别是关于字段命名不规范导致无法正常解析的情况,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用FastJson把Vo类转换为Json字符串的时候会出现遇到首字母大小写命名不规范的一些属性时候。

    //收件人信息	Object	 	Y
    //用户姓名       	String	32    Y	字符串长度不能大于32
    private String rName;
    //用户邮编	int	 	N                              	必须为正整数
    private String rPhone;
    //用户电话,包括区号、电话号码及分机号,中间用“-”分隔;
    //String          	32	N
    //字符串长度不能大于32 , 不能包含汉字
    private String rMobile;
    //用户移动电话, 手机和电话至少填一项	String	32	N	度不能大于32, 不能包含汉字
    private String rProv;
    //省份	String	32	Y	字符串长度不能大于32
    private String rCity;
    //城市与区县, 城市与区县用英文逗号隔开	String	32	Y	字符串长度不 能大于64
    private String rAddress;
    //详细地址(注:不包含省市区)	String	256	Y	字符串长度不能大于256
    private String rPostCode;

get set 方法会生成这样的数据:

    public String getsName() {
        return sName;
    }

    public void setsName(String sName) {
        this.sName = sName;
    }

    public String getsPhone() {
        return sPhone;
    }

    public void setsPhone(String sPhone) {
        this.sPhone = sPhone;
    }

    public String getsMobile() {
        return sMobile;
    }

    public void setsMobile(String sMobile) {
        this.sMobile = sMobile;
    }

    public String getsProv() {
        return sProv;
    }

    public void setsProv(String sProv) {
        this.sProv = sProv;
    }

    public String getsCity() {
        return sCity;
    }

这个getset方法后面紧跟的数据不是大写导致解析的时候不能解析出来。这样只需要在get方法上添加@JSONFiled(name ="")即可

   @JSONField(name = "sName")
    public String getsName() {
        return sName;
    }

    public void setsName(String sName) {
        this.sName = sName;
    }

    @JSONField(name = "sPhone")
    public String getsPhone() {
        return sPhone;
    }

    public void setsPhone(String sPhone) {
        this.sPhone = sPhone;
    }

    @JSONField(name = "sMobile")
    public String getsMobile() {
        return sMobile;
    }

    public void setsMobile(String sMobile) {
        this.sMobile = sMobile;
    }

    @JSONField(name = "sProv")
    public String getsProv() {
        return sProv;
    }

    public void setsProv(String sProv) {
        this.sProv = sProv;
    }

    @JSONField(name = "sCity")
    public String getsCity() {
        return sCity;
    }

结束············

### Fast JSON 字符串换为 Java 对象时的大小写问题解决方案 当处理 Fast JSON 序列化和反序列化过程中遇到字段名大小写的不匹配问题时,可以采取多种方法来确保数据能够正确映射到目标类属性上。 #### 使用 `@JSONField` 注解指定名称 通过使用 `com.alibaba.fastjson.annotation.JSONField` 注解,可以在定义实体类成员变量时显式指明其对应的 JSON 键名。这允许开发者自定义键值对之间的映射关系而不受原始命名约定的影响: ```java import com.alibaba.fastjson.annotation.JSONField; public class Example { @JSONField(name = "camelCase") private String camel_case; } ``` 此方式适用于已知所有可能存在的不同大小写组合的情况[^1]。 #### 配置全局解析器忽略大小写差异 另一种更为通用的方法是在应用启动阶段配置 FastJsonParser 的默认行为,使其在整个应用程序范围内自动忽略字母大小写的区别对待。具体实现如下所示: ```java import com.alibaba.fastjson.parser.ParserConfig; import com.alibaba.fastjson.serializer.SerializeConfig; // 设置全局 Parser Config 忽略大小写敏感度 ParserConfig.getGlobalInstance().setAsmEnable(false); SerializeConfig config = SerializeConfig.globalInstance; config.setAsmEnable(false); // 或者单独针对某次操作设置选项 parserConfig.setAutoTypeSupport(true); parserConfig.setIgnoreNotMatch(true); ``` 上述代码片段展示了如何调整解析配置以适应不同的业务需求场景下的灵活性要求[^2]。 #### 自定义 Deserializer 处理特定逻辑 对于更加复杂的情形,则可以通过继承 DefaultDeserializer 并重载 parse 方法来自定义反序列化的流程控制。这种方式提供了最大的自由度去应对各种特殊情况,比如某些第三方 API 返回的数据格式不符合常规标准等问题。 ```java import com.alibaba.fastjson.parser.DefaultExtJSONParser; import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; import java.lang.reflect.Type; public class CustomDeserializer implements ObjectDeserializer { public <T> T deserialze(DefaultExtJSONParser parser, Type type, Object fieldName) { // 实现具体的换逻辑... return null; } public int getFastMatchToken() { return 0; } } ``` 以上三种策略可以根据实际项目中的具体情况灵活选用或组合运用,从而有效解决由于大小写引起的 JSON 换难题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值