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

网站建设请示手机百度搜索引擎入口

网站建设请示,手机百度搜索引擎入口,国外 做励志视频的网站,企业网站怎么做才好怒发冲冠,凭阑处、潇潇雨歇。抬望眼,仰天长啸,壮怀激烈。三十功名尘与土,八千里路云和月。莫等闲、白了少年头,空悲切。 靖康耻,犹未雪。臣子恨,何时灭。驾长车,踏破贺兰山缺。壮志饥…

怒发冲冠,凭阑处、潇潇雨歇。抬望眼,仰天长啸,壮怀激烈。三十功名尘与土,八千里路云和月。莫等闲、白了少年头,空悲切。
靖康耻,犹未雪。臣子恨,何时灭。驾长车,踏破贺兰山缺。壮志饥餐胡虏肉,笑谈渴饮匈奴血。待从头、收拾旧山河,朝天阙。
——《满江红》 岳飞

在这里插入图片描述


系列文章目录

  1. 项目搭建
  2. App登录及网关
  3. App文章
  4. 自媒体平台(博主后台)
  5. 内容审核(自动)
  6. Long类型精度丢失问题


一、存在的问题

前端的 Number 数据类型,能够表示的整数范围是从 -9007199254740992 ~ 9007199254740992(包含边界值)

如下图,后端返回的 id 超过 9007199254740992 范围时,会导致精度丢失(超过16位后的数字都是 0)
在这里插入图片描述


二、JacksonFilter

在这里插入图片描述

  • 当后端响应给前端的数据中包含了 id 或者 特殊标识(可自定义)的时候,把当前数据进行转换为 String 类型
  • 当前端传递后后端的 dto 中有 id 或者 特殊标识(可自定义)的时候,把当前数据转为 IntegerLong 类型

三、自定义注解

作用: 在需要转换类型的字段属性上,用于非id的属性上

新建 heima-leadnews-model\src\main\java\com\heima\model\common\annotation\IdEncrypt.java 文件:

@JacksonAnnotation
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
public @interface IdEncrypt {
}

四、序列化和反序列化类

1. 用于序列化自增数字的混淆

新建 heima-leadnews-model\src\main\java\com\heima\model\common\annotation\IdEncrypt.java 文件:

@JacksonAnnotation
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
public @interface IdEncrypt {
}

2. 用于反序列化自增数字的混淆解密

新建 heima-leadnews-common\src\main\java\com\heima\common\jackson\ConfusionDeserializer.java 文件:

public class ConfusionDeserializer extends JsonDeserializer<Object> {JsonDeserializer<Object>  deserializer = null;JavaType type =null;public  ConfusionDeserializer(JsonDeserializer<Object> deserializer, JavaType type){this.deserializer = deserializer;this.type = type;}@Overridepublic  Object deserialize(JsonParser p, DeserializationContext ctxt)throws IOException{try {if(type!=null){if(type.getTypeName().contains("Long")){return Long.valueOf(p.getValueAsString());}if(type.getTypeName().contains("Integer")){return Integer.valueOf(p.getValueAsString());}}return IdsUtils.decryptLong(p.getValueAsString());}catch (Exception e){if(deserializer!=null){return deserializer.deserialize(p,ctxt);}else {return p.getCurrentValue();}}}
}

3. 用于过滤序列化时处理的字段

新建 heima-leadnews-common\src\main\java\com\heima\common\jackson\ConfusionSerializerModifier.java 文件:

public class ConfusionSerializerModifier extends BeanSerializerModifier {@Overridepublic List<BeanPropertyWriter> changeProperties(SerializationConfig config,BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) {List<BeanPropertyWriter> newWriter = new ArrayList<>();for(BeanPropertyWriter writer : beanProperties){String name = writer.getType().getTypeName();if(null == writer.getAnnotation(IdEncrypt.class) && !writer.getName().equalsIgnoreCase("id")){newWriter.add(writer);} else {writer.assignSerializer(new ConfusionSerializer());newWriter.add(writer);}}return newWriter;}
}

4. 用于过滤反序列化时处理的字段

新建 heima-leadnews-common\src\main\java\com\heima\common\jackson\ConfusionDeserializerModifier.java 文件:

public class ConfusionDeserializerModifier extends BeanDeserializerModifier {@Overridepublic BeanDeserializerBuilder updateBuilder(final DeserializationConfig config, final BeanDescription beanDescription, final BeanDeserializerBuilder builder) {Iterator it = builder.getProperties();while (it.hasNext()) {SettableBeanProperty p = (SettableBeanProperty) it.next();if ((null != p.getAnnotation(IdEncrypt.class)||p.getName().equalsIgnoreCase("id"))) {JsonDeserializer<Object> current = p.getValueDeserializer();builder.addOrReplaceProperty(p.withValueDeserializer(new ConfusionDeserializer(p.getValueDeserializer(),p.getType())), true);}}return builder;}
}

5. 用于注册模块和修改器

新建 heima-leadnews-common\src\main\java\com\heima\common\jackson\ConfusionModule.java 文件:

public class ConfusionModule extends Module {public final static String MODULE_NAME = "jackson-confusion-encryption";public final static Version VERSION = new Version(1,0,0,null,"heima",MODULE_NAME);@Overridepublic String getModuleName() {return MODULE_NAME;}@Overridepublic Version version() {return VERSION;}@Overridepublic void setupModule(SetupContext context) {context.addBeanSerializerModifier(new ConfusionSerializerModifier());context.addBeanDeserializerModifier(new ConfusionDeserializerModifier());}/*** 注册当前模块* @return*/public static ObjectMapper registerModule(ObjectMapper objectMapper){//CamelCase策略,Java对象属性:personId,序列化后属性:persionId//PascalCase策略,Java对象属性:personId,序列化后属性:PersonId//SnakeCase策略,Java对象属性:personId,序列化后属性:person_id//KebabCase策略,Java对象属性:personId,序列化后属性:person-id// 忽略多余字段,抛错objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);return objectMapper.registerModule(new ConfusionModule());}}

6. 自动化配置

提供自动化配置默认ObjectMapper,让整个框架自动处理id混淆

新建 heima-leadnews-common\src\main\java\com\heima\common\jackson\InitJacksonConfig.java 文件:

@Configuration
public class InitJacksonConfig {@Beanpublic ObjectMapper objectMapper() {ObjectMapper objectMapper = new ObjectMapper();objectMapper = ConfusionModule.registerModule(objectMapper);return objectMapper;}}

五、自动配置

新建 heima-leadnews-common\src\main\resources\META-INF\spring.factories 文件:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.heima.common.exception.ExceptionCatch,\com.heima.common.swagger.SwaggerConfiguration,\com.heima.common.swagger.Swagger2Configuration,\com.heima.common.aliyun.GreenImageScan,\com.heima.common.aliyun.GreenTextScan,\com.heima.common.tess4j.Tess4jClient,\com.heima.common.redis.CacheService,\com.heima.common.jackson.InitJacksonConfig

六、标识字段

在dto中传递参数的时候如果想要把数值类型转为json,可以使用@IdEncrypt标识字段进行转换,如下:

@Data
public class ArticleInfoDto {// 文章ID@IdEncryptLong articleId;
}


http://www.ds6.com.cn/news/48184.html

相关文章:

  • 网站建设mrd文档模板网上销售平台
  • 做后台财务系统网站最新时事热点
  • 南京做网站询南京乐识网站开发报价方案
  • 网上做网站赚钱吗seo网站优化优化排名
  • 猪八戒做网站要多少钱福州网络营销推广公司
  • 中信建设有限责任公司招聘深圳百度seo怎么做
  • 常州网站建设电话免费seo快速收录工具
  • 有哪些网站下载ppt是免费的关键词优化推广排名软件
  • seo网站排名推广央视新闻的新闻
  • 做技术开发的网站软文自助发稿平台oem
  • 做网站简约学校网站单页网站设计
  • 上海制作网站抖音搜索关键词推广
  • 建设工程新工艺网站百色seo外包
  • 手机网站开发如何设置触摸功能北京网优化seo公司
  • 美食网站开发步骤网店推广策划方案
  • ps做网站首页怎么百度一下下载安装
  • 卡密网站怎么做搜索引擎推广文案
  • 网站制作服务平台域名搜索引擎入口
  • 企业网站建设方案怎么写腾讯广告代理
  • 榆林城乡建设规划官方网站手机访问另一部手机访问文件
  • 成都网站排名优化开发正规百度推广
  • php建设动态网站十大it教育培训机构排名
  • 如何批量做网站网站优化排名软件推广
  • 常州好搜网络科技有限公司优化网站搜索排名
  • wordpress购物盒子seo在线论坛
  • 章丘做网站搜索引擎最新排名
  • 网站建设常规自适应怎么优化
  • 网站建设成本图怎么去做推广
  • 江门网站建设价格微信推广方案
  • 色彩搭配比较好的网站年度关键词有哪些