知识库

@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模板:

image-20190212144012327

image-20190212144043637

image-20190212144114775

image-20190212144141761

image-20190212151150605

在上述区域中粘贴下面的代码:

#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
}

results matching ""

    No results matching ""