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