当前位置: 首页 > news >正文

安徽省建设安全协会网站asp.net网站开发步骤

安徽省建设安全协会网站,asp.net网站开发步骤,如何高效的完成网站建设步骤,开发app代驾软件多少钱前言 项目中经常需要后端将字典类型字段值的中文名称返回给前端。通过sql中关联字典表或者自定义函数不仅影响性能还不能使用mybatisplus自带的查询方法,所以推荐使用自定义注解、Json序列化器,Spring的缓存功能实现自动转换字典类型字段。以下实现Spri…

前言

项目中经常需要后端将字典类型字段值的中文名称返回给前端。通过sql中关联字典表或者自定义函数不仅影响性能还不能使用mybatisplus自带的查询方法,所以推荐使用自定义注解、Json序列化器,Spring的缓存功能实现自动转换字典类型字段。以下实现SpringBoot版本为2.6.13。

一、自定义字典注解

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.common.utils.DictSerializer;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/**定义一个自定义注解,用于标识需要进行字典自动翻译的字段。**/
@Target({ElementType.FIELD}) //表示它只能应用在类的字段上。
@Retention(RetentionPolicy.RUNTIME) //确保注解在运行时可用。
@JacksonAnnotationsInside 
@JsonSerialize(using = DictSerializer.class)//指定使用DictSerializer来处理被注解字段的序列化,不加@Dict注解的字段不会被DictSerializer处理。
public @interface Dict {/*** 字典代码*/String type() default "";/*** 字段后缀*/String suffix() default "Name";
}

二、自定义Json序列化器

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import lombok.SneakyThrows;
import java.io.IOException;
import java.util.Objects;/**@Dict注解中引入了JsonSerializer,加了@Dict注解的字段的序列化会被DictSerializer处理。不能在DictSerializer 类上加@JsonComponent注解或者自定义配置类 JacksonConfig来注册Json序列化器,使用注解或配置类注册序列化器会使其全局生效,任何字段的序列化会被DictSerializer处理。**/
public class DictSerializer extends JsonSerializer<Object> {@SneakyThrows@Overridepublic void serialize(Object value, JsonGenerator gen, SerializerProvider serializerProvider) throws IOException {// 写入原字段的值gen.writeObject(value);if (Objects.nonNull(value)) {// 获取数据字典项服务实例// 不使用全局变量和在构造函数中获取Bean,延迟加载Bean,避免构造函数初始化空指针问题DictService dictService = SpringContextHolder.getBean(SysDictItemService.class);// 序列化字段名称String fieldName = gen.getOutputContext().getCurrentName();// 字典项注解对象Dict dictAnno = gen.getCurrentValue().getClass().getDeclaredField(fieldName).getAnnotation(Dict.class);String dictItemName = dictService.getDictItemName(dictAnno.type(), value);// 写入新字段名称gen.writeFieldName(fieldName + dictAnno.suffix());// 写入新字段的值gen.writeString(dictItemName);}}
}

三、Spring上下文工具类

@Component
public class SpringContextHolder implements ApplicationContextAware {private static ApplicationContext context;public static <T> T getBean(Class<T> clazz) {return context.getBean(clazz);}@Overridepublic void setApplicationContext(ApplicationContext ctx) {context = ctx;}
}

三、字典服务层(含缓存)

1.SpringBoot启动类上加@EnableCaching注解开启缓存功能

2.根据字典代码和字典项代码查询字典项名称

	/*** @Cacheable为SpringBoot自带的缓存注解,使用字典代码+字典项代码作为缓存的key,使用该注解会自动		   * 缓存getDictItemName方法的返回值。*/@Cacheable(value = "dictCache", key = "#dictCode+':'+#code")@Overridepublic String getDictItemName(String dictCode, Object code) {List<SysDictItem> itemList = ......;String value = null;if(CollectionUtils.isNotEmpty(itemList)){value = itemList.get(0).getItemName();}return Optional.ofNullable(value).orElse(code.toString());}

3.新增或修改字典项

 	 /*** @CachePut注解是SpringBoot自带的缓存注解,使用该注解在更新字典时会自动更新字典缓存,注意此处	* 的key要与getDictItemName方法@Cacheable注解中的key一致,saveOrUpdateDictItem方法必须要返回要* 缓存的内容,即字典项名称。*/@CachePut(value = "dictCache", key = "#dictItem.dictCode+':'+#dictItem.itemCode")@Overridepublic String saveOrUpdateDictItem(SysDictItem dictItem) {String itemName = null;int con;if(StringUtils.isBlank(dictItem.getItemId())){//新增con = baseMapper.insert(dictItem);} else {//修改con = baseMapper.updateById(dictItem);}if(con > 0){itemName = dictItem.getItemName();}return itemName;}

参考资料:
1.百度DeepSeek-R1满血版搜索结果
2.csdn收藏(Springboot)中的https://blog.csdn.net/hangbingbihai/article/details/145452376?spm=1001.2014.3001.5506
https://blog.csdn.net/demo_yo/article/details/129157902?spm=1001.2014.3001.5506

http://www.yayakq.cn/news/850990/

相关文章:

  • 精品课程网站建设内容H5响应式网站数据
  • 说几个手机可以看的网站商丘网签查询
  • 做网站需要几个人分工网站建设公司排行杭州
  • 导购网站开发要多少钱wordpress热门文章调用
  • 电商网站建设内容规划怎么做网页制作鼠标点击导航项时下拉显示
  • 太原建设局网站网站后台传图片
  • 做徽章的企业网站电子商务做网站实训体会
  • 无障碍浏览网站怎么做响应式布局原理是什么
  • 为网站做安全认证服务怎么给网站做反链
  • 万网域名注册信息查询seo词库排行
  • 广州外贸网站效果白山北京网站建设
  • 哪做网站好网络营销分类
  • 南昌建网站单位中国建设招投标网
  • 建设局特种作业网站wordpress登录404
  • 成都网站建设设计公司排名影音先锋资源网站建设
  • 建设网站需要注册证书吗c2c模式的企业有哪些
  • 青州住房和城乡建设网站微信网站开发新开页面
  • 网站程序定制开发流程lnmpa wordpress ssl
  • 九网互联怎么建设网站绿色风格的网站
  • 化工网站建设价格品牌网站建设报价表
  • 龙口网站建设联系电话如何做营销活动
  • 唯品会一家专门做特卖的网站手机版饶平网站建设
  • 网站建设的前端开发和后端开发专做排版网站
  • 站长域名查询工具本机做wordpress乱码
  • 电子商务网站建设与网页设计如何建立公司网站是什么
  • 榆次网站建设公司个人网站备案名称例子
  • 做神马网站优化快速排名软件电子产品网站建设分析的摘要
  • 阿里巴巴国际站官网网站专栏建设
  • 微网站怎么免费做接设计单的网站
  • 南昌网站设计特色wordpress奖励插件