idea重写toString方法模板添加 json + super.toString()

idea重写toString方法模板添加 json + super.toString()

本文有图有真相,对新手十分友好,有困惑的朋友欢迎留言

好处

①由JSON转换为Object的对象,通过本方法toString后输出内容与原JSON完全一致,保证了日志内容的可逆性;
②本方法不输出null值,减少了日志打印量;
③使用BufferString拼接,避免生成大量字符串变量。

步骤

1、首先打开idea界面,点击鼠标右键,选择generate > toString > settings



2、新建模板,如下图所示,选择Templates > +,输入模板名称,推荐:String json and super.toString() with {}
在这里插入图片描述
3、如图,选中模板,将以下代码粘进去,点击OK即可

public java.lang.String toString() {
final java.lang.StringBuilder sb = new java.lang.StringBuilder("{");
#foreach ($member in $members)
    #if($member.object)
    if ($member.name != null){
        #if ($member.string || $member.date)
        sb.append("\"$member.name\":\"").append($member.accessor).append("\",");
        #elseif ($member.primitiveArray || $member.objectArray)
        sb.append("\"$member.name\":").append(java.util.Arrays.toString($member.name)).append(",");
        #else
        sb.append("\"$member.name\":").append($member.accessor).append(",");
        #end
    }
    #else
        #if ($member.string || $member.date)
        sb.append("\"$member.name\":\"").append($member.accessor).append("\",");
        #elseif ($member.primitiveArray || $member.objectArray)
        sb.append("\"$member.name\":").append(java.util.Arrays.toString($member.name)).append(",");
        #else
        sb.append("\"$member.name\":").append($member.accessor).append(",");
        #end
    #end
#end
#if ( $class.hasSuper )
sb.append(super.toString().substring(1));
#else
if(sb.lastIndexOf(",") != -1){
	sb.deleteCharAt(sb.lastIndexOf(","));
}
sb.append('}');
#end
return sb.toString();
}

4、选择刚才创建的模板,生成toString方法,看效果

这里生成的if是带大括号的,如果有小伙伴不需要,模板值设成以下内容即可

public java.lang.String toString() {
final java.lang.StringBuilder sb = new java.lang.StringBuilder("{");
#foreach ($member in $members)
    #if($member.object)
    if ($member.name != null)
        #if ($member.string || $member.date)
        sb.append("\"$member.name\":\"").append($member.accessor).append("\",");
        #elseif ($member.primitiveArray || $member.objectArray)
        sb.append("\"$member.name\":").append(java.util.Arrays.toString($member.name)).append(",");
        #else
        sb.append("\"$member.name\":").append($member.accessor).append(",");
        #end
    #else
        #if ($member.string || $member.date)
        sb.append("\"$member.name\":\"").append($member.accessor).append("\",");
        #elseif ($member.primitiveArray || $member.objectArray)
        sb.append("\"$member.name\":").append(java.util.Arrays.toString($member.name)).append(",");
        #else
        sb.append("\"$member.name\":").append($member.accessor).append(",");
        #end
    #end
#end
#if ( $class.hasSuper )
sb.append(super.toString().substring(1));
#else
if(sb.lastIndexOf(",") != -1)
sb.deleteCharAt(sb.lastIndexOf(","));
sb.append('}');
#end
return sb.toString();
}

扩展小知识

为什么不用JSONObject.toJSONString()方法呢?

①在java中部分对象不支持JSON的序列化,例如:HttpServletRequest、HttpServletResponse等;
②其取值的本质是调用类属性的get方法,当存在以is开头的boolean变量时,输出的变量名会自动截取掉is;
③内存占用、耗时相对toString也有不小差距,内存占用不便展示,耗时见下图。

注意事项:暂不支持Map类型打印成字符串后转换为Object

创作不易,如果对你有帮助,点个赞再走呗

为了维护抄袭成风的网络环境
严谨任何形式的转载

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值