使用场景:
@Data
@Component
public class Info implements Serializable {
private Integer id;
private String name;
private Integer age;
@TableField(exist = false)
private String str;
public String getStr() {
return "test";
}
public void setStr(String str) {
this.str = str;
}
private static final long serialVersionUID = 1L;
}
这里的str字段不是数据表中的字段,这里写了一个getStr()方法,这里与平常不同的是,该方法返回的不是this.str,而是其他的字符串“test“。
没有调用任何方法给str赋值,此时使用这个实体类的时候,会返回"str": "test",这不正是getStr()方法返回的值吗,也就是说getStr()方法自动执行了。
原因分析:
这是json序列化导致的,springboot默认使用的是jackson,在序列化的时候,先利用反射找到对象类的所有get方法,接下来去get,然后小写化,作为json的每个key值,而get方法的返回值作为value。接下来再反射field,添加到json中。
另外,如果我们在实体类的定义中去掉str字段,保留getStr()方法的话,返回结果仍然不变。
解决:
可以控制get方法返回别的值
public String getStr() {
if (id==1) {
return "第一名";
}
else if (id==2){
return "第二名";
}
return "重在参与";
}