Jackson通过自定义序列化器给URL拼接访问域名

1、需求

在存储文件访问路径时,一般不会存储域名地址,若文件服务域名和当前应用域名不一致时,就需要在返回数据库的图片路径给前端时,拼接文件服务的域名。

2、处理方式

因为Spring Boot默认使用的是Jackson作为序列化工具,那么我们就可以通过继承JsonSerializer抽象类,实现自定义的序列化逻辑,在序列化时拼接访问域名。

自定义序列化类如下:

import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.study.utils.PrincipalUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.IOException;/*** json序列化,拼接访问地址*/
@Component
public class ImgJsonSerializer extends JsonSerializer<String> {@Value("${file.access-path}")private String imgAccessPath;@Overridepublic void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {if (StrUtil.isBlank(value)) {gen.writeString(StrUtil.EMPTY);return;} else if (StrUtil.isBlank(imgAccessPath)) {gen.writeString(value);return;}String[] imgs = value.split(StrUtil.COMMA);StringBuilder sb = new StringBuilder();for (String img : imgs) {// 图片为http协议开头,直接返回if (PrincipalUtil.isHttpProtocol(img)) {sb.append(img).append(StrUtil.COMMA);}else {sb.append(imgAccessPath).append(img).append(StrUtil.COMMA);}		}sb.deleteCharAt(sb.length() - 1);gen.writeString(sb.toString());}
}

再通过@JsonSerialize注解指定我们自己定义的ImgJsonSerializer序列化器:

/** 头像 */
@TableField(value = "img")
@JsonSerialize(using = ImgJsonSerializer.class)
private String img;

3、效果演示

数据库存储的数据内容:
在这里插入图片描述
接口返回的数据,拼接了http://127.0.0.1:8080/study前缀:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/305844.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金融贷款行业怎么精准获客,电销打吐了!教你两招

助贷行业&#xff0c;一般都会设有kpi&#xff0c;压力竞争都不小。虽然现在贷款电销大家对此意见不同&#xff0c;但是&#xff0c;不可否认&#xff0c;这个行业&#xff0c;电销就是它们最快速的获客方式。只要耐得住性子&#xff0c;有一份精准的话单&#xff0c;就可以开工…

Appium+python自动化(七)- 初识琵琶女Appium(千呼万唤始出来,犹抱琵琶半遮面)- 上(超详解)

简介 “千呼万唤始出来&#xff0c;犹抱琵琶半遮面”&#xff0c;经过前边的各项准备工作&#xff0c;终于才把appium这位琵琶女请出来。那么下边就由宏哥给各位看官、小伙伴们和童鞋们来引荐这位美女&#xff08;帅哥&#xff09;。这一篇主要是对前边的内容做一个小小的总结&…

快乐学Python,Python基础之如何控制代码执行顺序?【分支结构和循环结构】

在上一篇文章中&#xff0c;我们所操作的所有代码都是顺序执行的。什么意思呢&#xff1f;就是我们在所有例子中的代码&#xff0c;计算机都是从第一句开始执行&#xff0c;执行完毕后执行第二句&#xff0c;以此类推&#xff0c;最终执行完整个代码块。 以下面代码为例&#…

Linux高级管理——yum仓库服务

一、部署yum软件仓库&#xff1a; 借助于YLM软件仓库&#xff0c;可以完成安装&#xff0e;卸载、自动升级rpm软件包等任务。YUM的前身是YUP (Yellow dog Updater, Yellow dog Linux的软件更新器),最初由TSS公司&#xff08;TerraSoft Solutions&#xff0c;INC.&#xff09;使…

日常中msvcp120.dll丢失五种解决方法

在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“msvcp120.dll丢失”。那么&#xff0c;msvcp120.dll到底是什么&#xff1f;它的作用又是什么呢&#xff1f;为什么会出现丢失的情况呢&#xff1f;本文将为您详细介绍msvcp120.dll的相…

【网络技术】【Kali Linux】Wireshark嗅探(二)TCP协议

一、实验目的 本次实验使用wireshark流量分析工具进行网络嗅探&#xff0c;旨在了解TCP协议的原理以及连接建立过程。 二、网络环境设置 本次实验使用Kali Linux虚拟机完成&#xff0c;主机操作系统为Windows11&#xff0c;虚拟化平台选择Oracle VM VirtualBox&#xff0c;组…

JVM篇:JVM的简介

JVM简介 JVM全称为Java Virtual Machine&#xff0c;翻译过来就是java虚拟机&#xff0c;Java程序&#xff08;Java二进制字节码&#xff09;的运行环境 JVM的优点&#xff1a; Java最大的一个优点是&#xff0c;一次编写&#xff0c;到处运行。之所以能够实现这个功能就是依…

vue动态路由,三级及以上路由,地址跳转,但是页面不显示

vue动态路由的时候,一级,二级路由都正常展示,但是三级,四级,五级等就只看到地址跳转了,但是页面并没有跳转,原因是共用了一个<router-view></router-view> import Layout from /layout import Vue from vue import Router from vue-router import db from /utils/…

由浅入深走进Python异步编程【协程与yield】(含代码实例讲解 || 迭代器、生成器、协程、yield from)

写在前面 从底层到第三方库&#xff0c;全面讲解python的异步编程。这节讲述的是python异步编程的底层原理第一节&#xff0c;详细了解需要配合下一节观看哦。纯干货&#xff0c;无概念&#xff0c;代码实例讲解。 本系列有6章左右&#xff0c;点击头像或者专栏查看更多内容&…

(13)Linux 进程的优先级、进程的切换以及环境变量等

前言&#xff1a;我们先讲解进程的优先级。然后讲解进程的切换&#xff0c;最后我们讲解环境变量&#xff0c;并且做一个 "让自己的可执行程序不带路径也能执行"的实践&#xff0c;讲解环境变量的到如何删除&#xff0c;最后再讲几个常见的环境变量。 一、进程优先级…

c++ / day03

1. 定义一个Person类&#xff0c;包含私有成员&#xff0c;int *age&#xff0c;string &name&#xff0c;一个Stu类&#xff0c;包含私有成员double *score&#xff0c;Person p1&#xff0c;写出Person类和Stu类的特殊成员函数&#xff0c;并写一个Stu的show函数&#xf…

CAS-手写自旋锁

CAS与自旋锁&#xff0c;借鉴CAS思想 什么是自旋锁&#xff1f; CAS是实现自旋锁的基础&#xff0c;CAS利用CPU指令保证了操作的原子性&#xff0c;以达到锁的效果&#xff0c;至于自旋 锁---字面意思自己旋转。是指尝试获取锁的线程不会立即阻塞&#xff0c;而是采用循环的…