知识库
@JsonRawValue
无转换的将属性值写入到json 字符串中
public class Demo {
private String name;
@JsonRawValue
private String myJson;
}
@GetMapping("/test")
public Demo get(){
Demo demo =new Demo();
demo.setName("小明")
demo.setMyJson("{\"age\":10}")
return demo;
}
输出Json:
{
name:"小明",
myJson:{
age:10
}
}
idea equals template
idea的equals生成模板中if没有大括号,会导致不符合规范,可按下面步骤自定义equals模板:
在上述区域中粘贴下面的代码:
#parse("equalsHelper.vm")
public boolean equals(##
#if ($settings.generateFinalParameters)
final ##
#end
Object $paramName){
if(this == $paramName){return true;}
if ($paramName == null || getClass() != $paramName .getClass()) {return false;}
$class.name that = ($class.name) $paramName ;
return new org.apache.commons.lang.builder.EqualsBuilder()
#if($superHasEquals)
.appendSuper(super.equals($paramName))
#end
#foreach($field in $fields)
.append($field.accessor, ${classInstanceName}.$field.accessor)
#end
.isEquals();
}
继承时子类的序列化
要点:父类也必须实现Serializable
原因
没有实现序列化的父类中的属性在序列化时,jvm虚拟机会忽略掉他的原始值,而使用默认值:
class A{
int i;
public A(){}
}
class B extends A implements Serializable{
private static final long serialVersionUID = 1L;
public B(){}
public int getI(){ return i;}
public void setI(int i){ this.i=i;}
}
public static void main(String[] args){
B b= new B();
b.setI(10);
//序列化
toSerializable(b);
//反序列化
B b1 = toDeSerializable();
System.out.println(b1.getI());
}
上述代码的结果会输出 0 ;
正确示例
class A implements Serializable{
private static final long serialVersionUID = 2L;
// ...other code
}
class B extends A implements Serializable{
private static final long serialVersionUID = 1L;
//...other code
}