@JsonSerialize注解
1.简介
@JsonSerialize注解可以自定义改变返回前端的内容,比如:将Student实体类的age字段的值在返回前端之前,由20改为21.
要用到jackson-databind依赖包,在Spring Boot项目中,默认已经集成了Jackson,因此你不需要手动引入Jackson库。
2.上例子
将Student实体类的age字段的值在结果返回前端之前,由20改为21.
步骤一:
新建一个FormatterSerializer类,继承JsonSerializer<T>类,比如:如果想改变的是数据类型,比如Integer,可以把 T写成Integer,也可以写成Number类型.
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
public class FormatterSerializer extends JsonSerializer<Number> {
@Override
public void serialize(Number value, JsonGenerator gen, SerializerProvider serializerProvider) throws IOException {
if(value == null){
gen.writeNull();
}else {
int i = value.intValue() +1;
gen.writeNumber(i);
}
}
}
步骤二:新建一个Student实体类,在age字段加上@JsonSerialize注解,using = FormatterSerializer类
import com.example.controller.FormatterSerializer;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
@Data
public class Student {
private String name;
@JsonSerialize(using = FormatterSerializer.class)
private Integer age;
}
步骤三: 写个接口测试:
@RestController
@RequestMapping("app/")
@Slf4j
public class AAController {
@GetMapping("/aa")
public Student queryById() {
Student student = new Student();
student.setName("张三");
student.setAge(20);
return student;
}
}
现在看结果:
结果看到,age从20变成了21, @JsonSerialize注解成功生效了.