知识库
@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
}