FastJson转Java对像字段不区分大小写

这篇具有很好参考价值的文章主要介绍了FastJson转Java对像字段不区分大小写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

昨天遇到参数key大小写不一致导致校验签名失败的问题,查了很长时间才找到原因。看了一下FastJson源码,发现JSON.toObject中转换成对象的时候会忽略大小写。

所以,当使用了JSON.toObject将json转成Java对象后,再用JSON.toObject转成json,key值就变了。

写个方法验证一下:

public class Person {
	private String nickName;

	public String getNickName() {
		return nickName;
	}

	public void setNickName(String nickName) {
		this.nickName = nickName;
	}
	
}

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

public class JsonToObject {

	public static void main(String[] args) {
		JSONObject json1 = new JSONObject();
		json1.put("nickName", "shawn1");
		System.out.println(json1);
		Person p1 = json1.toJavaObject(Person.class);
		System.out.println(p1.getNickName());
		JSONObject json11 = (JSONObject)JSON.toJSON(p1);
		System.out.println(json11);
		System.out.println("--------------------");
		
		JSONObject json2 = new JSONObject();
		json2.put("nickname", "shawn2");
		System.out.println(json2);
		json2.toJavaObject(Person.class);
		Person p2 = json2.toJavaObject(Person.class);
		System.out.println(p2.getNickName());
		JSONObject json22 = (JSONObject)JSON.toJSON(p2);
		System.out.println(json22);
		System.out.println("--------------------");
		
		JSONObject json3 = new JSONObject();
		json3.put("nIcknAme", "shawn3");
		System.out.println(json3);
		json3.toJavaObject(Person.class);
		Person p3 = json3.toJavaObject(Person.class);
		System.out.println(p3.getNickName());
		JSONObject json33 = (JSONObject)JSON.toJSON(p3);
		System.out.println(json33);
		System.out.println("--------------------");
	}	

}

输出:

{"nickName":"shawn1"}
shawn1
{"nickName":"shawn1"}
--------------------
{"nickname":"shawn2"}
shawn2
{"nickName":"shawn2"}
--------------------
{"nIcknAme":"shawn3"}
shawn3
{"nickName":"shawn3"}
--------------------

JSON.toObject中转换成对象的时候忽略了大小写,可以增强健壮性,但Java类是区分大小写的,如果有两个仅仅带小写不同的属性,可能就出问题了。

给Person增加一个属性再试一下:

public class Person {
	private String nickName;

	public String getNickName() {
		return nickName;
	}

	public void setNickName(String nickName) {
		this.nickName = nickName;
	}
	
	private String nickname;

	public String getNickname() {
		return nickname;
	}

	public void setNickname(String nickname) {
		this.nickname = nickname;
	}
	
}

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

public class JsonToObject {

	public static void main(String[] args) {
		JSONObject json1 = new JSONObject();
		json1.put("nickName", "shawn1");
		System.out.println(json1);
		Person p1 = json1.toJavaObject(Person.class);
		System.out.println("nickName:"+p1.getNickName()+"\t nickname:"+p1.getNickname());
		JSONObject json11 = (JSONObject)JSON.toJSON(p1);
		System.out.println(json11);
		System.out.println("--------------------");
		
		JSONObject json2 = new JSONObject();
		json2.put("nickname", "shawn2");
		System.out.println(json2);
		json2.toJavaObject(Person.class);
		Person p2 = json2.toJavaObject(Person.class);
		System.out.println("nickName:"+p2.getNickName()+"\t nickname:"+p2.getNickname());
		JSONObject json22 = (JSONObject)JSON.toJSON(p2);
		System.out.println(json22);
		System.out.println("--------------------");
		
		JSONObject json3 = new JSONObject();
		json3.put("nIcknAme", "shawn3");
		System.out.println(json3);
		json3.toJavaObject(Person.class);
		Person p3 = json3.toJavaObject(Person.class);
		System.out.println("nickName:"+p3.getNickName()+"\t nickname:"+p3.getNickname());
		JSONObject json33 = (JSONObject)JSON.toJSON(p3);
		System.out.println(json33);
		System.out.println("--------------------");
	}	

}

输出:

{"nickName":"shawn1"}
nickName:shawn1	 nickname:null
{"nickName":"shawn1"}
--------------------
{"nickname":"shawn2"}
nickName:null	 nickname:shawn2
{"nickname":"shawn2"}
--------------------
{"nIcknAme":"shawn3"}
nickName:null	 nickname:shawn3
{"nickname":"shawn3"}
--------------------

这个结果符合你的预期吗?

所以,用JSON.toObject的时候还是得慎重。

以上。

https://wangxuan.me/tech/2023/06/02/FastJson-convert-json-to-Java-Object-field-ignore-case.html文章来源地址https://www.toymoban.com/news/detail-468308.html

到了这里,关于FastJson转Java对像字段不区分大小写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • hive查询区分大小写

    在Hive中,默认情况下,字段名是不区分大小写的,这意味着在查询中使用大写或小写字母来引用字段名称都是可以的。其实mysql也是一样的,大部分都不会区分大小写。 但是在部分业务场景时需要对这类数据进行处理,有这么几个方法可以尝试尝试。 启用此模式后,Hive将严

    2024年02月13日
    浏览(59)
  • mysql 索引 区分字符大小写

    mysql 建立索引,特别是unique索引,是跟字符集、字符排序规则有关的。 对于utf8mb4_0900_ai_ci来说,0900代表Unicode 9.0的规范,ai表示accent insensitivity,也就是“不区分音调”,而ci表示case insensitivity,也就是“不区分大小写”。 上述这种数据,如果选了  那么会报错,因为mysql认

    2024年02月12日
    浏览(53)
  • MySQL | MySQL不区分大小写配置

    MySQL 表内数据条件查询不区分大小写是因为排序规则的问题. 在MySQL中,InnoDB存储引擎默认的字符集是utf8,utf8mb4等,这些字符集再存储数据时没有指定排序规则的话,会默认使用 utf8_general_ci或utf8mb4_general_ci 作为表的排序规则,那么该表内的数据讲不区分大小写,这两种排序规则都是

    2024年02月04日
    浏览(55)
  • mysql设置不区分表名大小写

    MySql默认是区分表名大小的,为了不区分表名大小写,我们需要完成以下配置 十分简单 1.使用root用户,修改/etc/my.cnf文件 在[mysqld]下添加 lower_case_table_names=1 2.重启mysql service mysqld restart 这样就可以执行查询看结果啦

    2024年02月15日
    浏览(50)
  • es-已有mapping,实现查询不区分大小写

    一、写在前面 es查询默认区分大小写 二、实现原理 normalizer 是  keyword 的一个属性 参考 听说你还没掌握 ElasticSearch Normalizer 的使用方法?_yinni11的博客-CSDN博客 二、实现区分大小写的三种方案  方案一:直接创建对应的mapping 适用于还没有创建mapping的场景  方案二:新建map

    2024年01月19日
    浏览(56)
  • 【问题处理】—— lombok 的 @Data 大小写区分不敏感

    今天在项目本地编译的时候,发现有个很奇怪的问题,一直提示某位置找不到符号, 但是实际在Idea中显示确实正常的,一开始以为又是IDEA的故障,所以重启了IDEA,并执行了mvn clean然后重新编译。但是问题并没有得到解决 这段代码最近没人改动过,所以很疑惑,所以点进了

    2024年02月03日
    浏览(63)
  • 接口请求与对象转json中字段大小写的处理

    》前端请求对象字段为大写 》后端接受对象字段也为大写 前后端对象字段一模一样,就是接受不到前端传过来的值,针对这种情况,只需在后端对象中加 @JsonProperty(\\\"Id\\\") 即可 如下所示: 1)通过 com.fasterxml.jackson.databind.ObjectMapper 去转换,具体代码如下 2、 第二种通过gson去转

    2024年04月23日
    浏览(40)
  • 【现场问题】flink-cdc,Oracle2Mysql的坑,Oracle区分大小写导致

    Column ‘id’ is NOT NULL, however, a null value is being written into it. You can set job configuration ‘table.exec.sink.not-null-enforcer’=‘DROP’ to suppress this exception and drop such records silently 大致意思就是不能插入为空的数值。 为什么会报这个错误,我们来看DML的执行语句: insert into t_wx_target select

    2024年02月12日
    浏览(48)
  • posgresql通过PL/pgSQL脚本统一修改某字段大小写

    项目在做postgresql数据库适配时遇到了某些问题,需要统一将某个模式含id字段的全部表,将id字段由小写转换为大写,可以通过PL/pgSQL脚本实现。 先确保当前用户有足够的权限 同理,可以更换为其他字段

    2024年02月11日
    浏览(34)
  • DataGrip测试连接时报错: MySQL (无版本)区分大小写: 普通形式=mixed, 分隔形式=exactConnection refused: connect.

    问题: DataGrip测试连接时报错: MySQL (无版本)区分大小写: 普通形式=mixed, 分隔形式=exactConnection refused: connect. 解决: 查看一下mysql是都还开着 步骤:Win + R 打开运行窗口,输入 services.msc 后敲击回车键或点击确认。寻找 MySQL 服务,点击 启动此服务即可开启该服务。

    2024年02月08日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包