第一次写样式不会用 公司在做个API的项目 比较多的用到了 图片输出,时间格式化 以及单位等输出对象,之前一直都是写静态方法来处理这种时间转换 今天突然觉得 是不是可以写个注解来实现呢? 追了半天的源码 ,一无所获,果断谷歌了下 真的被我找到了 按照人家提供的方法自己实现了下,
片段代码(做图片路径补充)
注解的基本格式 先定义注解的基类
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = ImageFieldSerializer.class)
public @interface ImageField {
String value();
}
注解实现类 集成了 StdSerializer (这个是关键 之前一直用的JsonSerializer,没实现出来)
public class ImageFieldSerializer extends StdSerializer<Object> implements
ContextualSerializer {
private String classname;
public ImageFieldSerializer() {
super(Object.class);
}
public ImageFieldSerializer(String classname ) {
super(Object.class);
this.classname = classname ;
}
@Override
public void serialize(Object value, JsonGenerator jgen,
SerializerProvider provider) throws IOException {
String val = Global.getConfig("res.server") + value + classname;
jgen.writeString(val);
}
@Override
public JsonSerializer<?> createContextual(SerializerProvider prov,
BeanProperty property) throws JsonMappingException {
String unit = null;
ImageField ann = null;
if (property != null) {
ann = property.getAnnotation(ImageField.class);
}
if (ann != null) {
unit = ann.value();
}
return new ImageFieldSerializer(unit);
}
}
实体类 注解
@ImageField("avatar")
private String iamge;// 图片路徑
测试类不写了 正常的转
个人参考地址::https://stackoverflow.com/questions/43342097/jackson-custom-annotation-for-custom-value-serialization