springboot中自定义注解的开发及使用

我正在参加「掘金·启航计划」。在开发过程中,不免需要用到一些注解,但jdk和spring提供的注解有时候不能满足业务需求,需要自定义一些注解。例如,在上次开发中,需要对文件的路径进行保存入库,由于文件是存在oss上的,并且oss中设置的文件的路径是有时效性的,所以不能够将有时效性的路径存入数据库。

解决方案

将oss的文件的相对路径存入数据库。然后在取文件路径时,根据该相对路径解析为oss的完整的预览路径。

首先需要定义一个注解

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(
        using = FileFieldSerializer.class
)
public @interface FileUrlConvert {
}

这个注解用在类的属性字段上。其中@JsonSerialize( using = FileFieldSerializer.class )这个方法就是解析路径的方法。

@JsonSerialize注解

@JsonSerialize注解是Jackson JSON序列化库提供的注解。它的作用是指定某个字段在序列化时使用指定的Serializer序列化器。@JsonSerialize的using属性指定要使用的Serializer序列化器的类。所以,@JsonSerialize(using = FileFieldSerializer.class)表示使用FileFieldSerializer这个序列化器来序列化注解修饰的字段。也就是说,加了这个自定义注解的属性在返回时会自动根据FileFieldSerializer这里面的序列化规则转换并输出。

FileFieldSerializer序列化类

public class FileFieldSerializer extends StdSerializer<String> implements ContextualSerializer {
    public FileFieldSerializer() {
        super(String.class);
    }

    public JsonSerializer<?> createContextual(SerializerProvider serializerProvider, BeanProperty beanProperty) throws JsonMappingException {
        return new FileFieldSerializer();
    }

    public void serialize(String s, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (StringUtils.isEmpty(s)) {
            jsonGenerator.writeString(s);
        } else {
            String url = FileAccessUtils.getFileAccess().processPath(s);
            jsonGenerator.writeString(url);
        }

    }
}

这个类需要继承StdSerialier抽象类,并重写serialize方法,其中s就是原始的字符串。需要在方法中将该字符串根据一定规则转换为需要展示的字符串,再用jsonGenerator.writeString(s)方法,即可将转换后的字符串输出。

注解的使用

public class ArticleProcessFile implements Serializable {
    ...
     
    /**
     * 文件路径
     */
    @TableField("file_path")
    @FileUrlConvert
    private String filePath;

    ...
}

接口将该类直接返回便能够实现路径的转换。

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYtxt9Xi' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片