美文网首页
@JSONField name属性首字母大小写不敏感

@JSONField name属性首字母大小写不敏感

作者: 视频怪物 | 来源:发表于2019-11-26 11:19 被阅读0次

fastjson版本: 1.2.62

测试效果

测试fastjson转换.png

可以看到无论是picUrl1还是PicUrl1, 都能被fastjson转换成对应的picture值.

相关数据

  1. 建立实体类
@Data
public class SjtsMotorVehicle implements Serializable {

    private String picture;

    @JSONField(name = "picUrl1")
    public void setPicture(String picture) {
        this.picture = picture;
    }
}
  1. 封装相关转换工具
/**
 * 基于fastjson封装json工具
 *
 * @author videomonster
 * @since 1.0.0
 */
public final class JsonUtil {

  /**
     * 将json字符串转为指定类型的实例
     *
     * @param json
     * @param cls
     * @param <T>
     * @return
     */
    public static <T> T parse(String json, Class<T> cls) {
        return JSON.parseObject(json, cls);
    }
}
  1. 建立单元测试类, 并造两条测试数据
    private String sjtsPlateData() {
        return "{\n" +
                "  \"picUrl1\": \"http://52.6.127.134:8088/image/3/3/4b81de96ded14e349705dac07a0de0a8/147/11/16db/1251997095/2180\",\n" +
                "}";
    }

    private String sjtsPlateData1() {
        return "{\n" +
                "  \"PicUrl1\": \"http://52.6.127.134:8188/image/3/3/4b81de96ded14e349705dac07a0de0a8/147/11/16db/1251997095/2180\",\n" +
                "}";
    }

转换原理

com.alibaba.fastjson.JSONObject 类中, 我们可以看到invoke方法, 部分代码如下:

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Class<?>[] parameterTypes = method.getParameterTypes();
        if (parameterTypes.length == 1) {

            // other code...
            String name = null;
            JSONField annotation = TypeUtils.getAnnotation(method, JSONField.class);
            if (annotation != null) {
                if (annotation.name().length() != 0) {
                    name = annotation.name();
                }
            }

            if (name == null) {
                name = method.getName();

                if (!name.startsWith("set")) {
                    throw new JSONException("illegal setter");
                }

                name = name.substring(3);
                if (name.length() == 0) {
                    throw new JSONException("illegal setter");
                }
                // 在这里把name属性的首字母转为小写
                name = Character.toLowerCase(name.charAt(0)) + name.substring(1);
            }

            map.put(name, args[0]);
            return null;
        }

       // other code...
    }

相关文章

  • @JSONField name属性首字母大小写不敏感

    fastjson版本: 1.2.62 测试效果 可以看到无论是picUrl1还是PicUrl1, 都能被fastj...

  • Java基本语法

    基本语法: 大小写敏感:大小写敏感类名:类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写...

  • github搜索

    #按照项目名/仓库名搜索(大小写不敏感) in : name xxx #按照 README 搜索(大小写不敏感) ...

  • 自定义全局常量,类常量,类静态属性

    define('name', 'value') 自定义全局常量,默认大小写敏感const 定义类常量, 常量明前不...

  • 数据库序2

    选择数据库USE name <==> describe $name; SQL语句大小写不敏感多条SQL语句必...

  • 2017前端面试题之Css篇(1)

    1 . CSS 属性是否区分大小写? 答:不区分。 HTML,CSS都对大小写不敏感,但为了更好的可读性和团队协作...

  • Python字符串常用操作

    下面操作所使用的name的值如下 大小写相关 capitalize() 这一行首字母转换为大写 title() 所...

  • JSON转javaBean中有关键字的解决办法

    @SerializedName("") 和 @JSONField(name=" ")的使用取决于我们使用Gool...

  • 易错题

    1 css中如何设置英文首字母大写? text-transform 属性控制文本的大小写。这个属性会改变元素中的字...

  • python数据分析(一)

    一、数据类型 1、变量名: 命名规则:(1)由大小写字母,下划线组成,首字母不能是数字和下划线(2)大小写敏感,变...

网友评论

      本文标题:@JSONField name属性首字母大小写不敏感

      本文链接:https://www.haomeiwen.com/subject/hbrewctx.html