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> {@Overridepublic 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注解成功生效了.