博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JFinal renderJson对下划线支持不够友好问题
阅读量:6143 次
发布时间:2019-06-21

本文共 1517 字,大约阅读时间需要 5 分钟。

hot3.png

JFinal 官方建议用驼峰字段,这是有原因的。官方说明如下截图:

151900_styZ_1168934.png

假定我有一张user表,字段为 user_name,user_age

  • 如果用官方默认的json输出,下划线的字段则不会做处理。输出格式如下:{user_name:"小明",user_age:18}
  • 如果用FastJsonFactory输出,则输出的时候是{userName:"小明",userAge:18},这个时候问题来了,FastJsonFactory并不支持JFinal 的Record 对象输出。
  • 还有一种混合模式MixedJsonFactory,这个支持Record,但输出格式仍然为第一种。

 唯有自己根据MixedJsonFactory改造一下自己的JsonFactory了。单步调试了下MixedJsonFactory模式下renderJson的转化,发现JFinalJson class下面escape方法对key做了处理。

 

protected void escape(String s, StringBuilder sb) {		for(int i=0; i
= '\u0000' && ch <= '\u001F') || (ch >= '\u007F' && ch <= '\u009F') || (ch >= '\u2000' && ch <= '\u20FF')) { String str = Integer.toHexString(ch); sb.append("\\u"); for(int k=0; k<4-str.length(); k++) { sb.append('0'); } sb.append(str.toUpperCase()); } else{ sb.append(ch); } } } }

我们可以知道"-"跑进了default case,我们只要处理一下“-”这个字符,并且才下一个字母变成大写,就可以达到我们的目的了。

protected void escape(String s, StringBuilder sb) {		boolean isInitial = false;		for(int i=0; i
= 'a' && ch <= 'z'){ ch -= 32; } isInitial = false; sb.append(ch); continue; } if((ch >= '\u0000' && ch <= '\u001F') || (ch >= '\u007F' && ch <= '\u009F') || (ch >= '\u2000' && ch <= '\u20FF')) { String str = Integer.toHexString(ch); sb.append("\\u"); for(int k=0; k<4-str.length(); k++) { sb.append('0'); } sb.append(str.toUpperCase()); }else if(ch == '_'){ isInitial = true; }else{ sb.append(ch); } } } }

 

转载于:https://my.oschina.net/xiaoxustudent/blog/1486304

你可能感兴趣的文章
ArcGIS Engine开发前基础知识(4)
查看>>
Vivado Logic Analyzer的使用(二)
查看>>
[Git] git merge之squash
查看>>
C++/CLI
查看>>
Kerberos安全体系详解---Kerberos的简单实现
查看>>
Vuex demo
查看>>
新建swap分区的规划、挂载和自动挂载示例
查看>>
MySQL用户授权【转】
查看>>
我算是优秀的程序员吗?
查看>>
链表合并
查看>>
Delphi应用程序的调试(五)其他调试工具
查看>>
如何编写可维护的面向对象JavaScript代码
查看>>
win8: html5+css3+js
查看>>
Emacs 24.3支持cygwin上使用Win32 GUI
查看>>
对于一个排序数组,创建最低高度的Binary Tree
查看>>
Android-----判断是否有服务运行
查看>>
poj2392 Space Elevator(多重背包)
查看>>
oracle中恢复删除的表
查看>>
宏定义和内联函数
查看>>
设计一个栈,设计一个max()函数,求当前栈中的最大元素
查看>>