Jackson 2.x 系列【6】注解大全篇二
有道无术,术尚可求,有术无道,止于术。
本系列Jackson 版本 2.17.0
源码地址:https://gitee.com/pearl-organization/study-jaskson-demo
文章目录
- 注解大全
- 2.11 @JsonValue
- 2.12 @JsonKey
- 2.13 @JsonAnySetter
- 2.14 @JsonAnyGetter
- 2.15 @JacksonInject
- 2.16 @JsonCreator
- 2.17 @JsonTypeInfo
- 2.18 @JsonSubTypes
- 2.19 @JsonTypeName
- 2.20 @JsonTypeId
注解大全
2.11 @JsonValue
@JsonValue
用于将整个对象序列化为单个值,常用于只包含单个值的简单对象或枚举类型。Jackson
会忽略对象的其他属性和字段,只序列化由 @JsonValue
注解指定的方法或属性值。
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonValue {boolean value() default true;
}
例如当前有个性别枚举类:
public enum GenderEnum {MAN("man", "男"),WOMAN("woman", "女");GenderEnum(String code, String desc) {this.code = code;this.desc = desc;}private String code;private String desc;// 省略getter\serter.......
}
用户对象类包含了性别枚举类属性:
GenderEnum gender;
设置性别并进行序列化:
user.setGender(GenderEnum.WOMAN);String jsonValuesStr = objectMapper.writeValueAsString(user);System.out.println(jsonValuesStr);
输出时可以看到枚举类被序列化为WOMAN
,我们期望输出的是女:
{"gender":"WOMAN","userAge":25,"mobilePhone":"13899996666"}
在枚举类字段上添加@JsonValue
:
@JsonValueprivate String desc;
再次执行,可以看到将整个枚举类序列化为了一个值:
{"gender":"女","userAge":25,"mobilePhone":"13899996666"}
2.12 @JsonKey
@JsonKey
也是将某个对象序列化为单个值,但是仅在实例作为Map
类型中的键进行序列化时有效。
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonKey {boolean value() default true;
}
例如下方代码:
Org org1=new Org();org1.setId(1765672919981232128L);org1.setOrgName("阿里巴巴");Org org2=new Org();org2.setId(1772078846569590784L);org2.setOrgName("支付宝");Map<Org, String> map = new HashMap<>();map.put(org1,"顶级机构");map.put(org2,"下级机构");String orgStr = objectMapper.writeValueAsString(map);System.out.println(orgStr);
序列化后输出如下:
{"Org{id=1765672919981232128, orgName='null', address='null'}":"顶级机构","Org{id=1772078846569590784, orgName='null', address='null'}":"下级机构"}
在Org
属性上添加@JsonKey
注解,表示序列化该对象时,使用orgName
值作为Map
中的键:
@JsonKeyprivate String orgName;
输出如下:
{"阿里巴巴":"顶级机构","支付宝":"下级机构"}
2.13 @JsonAnySetter
@JsonAnySetter
用于反序列化时,将被忽略或无法反序列化的内容,统一存放在Map
集合中。
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonAnySetter {boolean enabled() default true;
}
在UserInfo
中添加一个Map
属性,Setter
方法使用@JsonAnySetter
标识:
private Map<String,Object> collect =new HashMap<>();@JsonAnySetterpublic void setCollect(String key,Object value) {this.collect.put(key,value);}
JSON
中有一个idCard
属性是UserInfo
类没有的:
String jsonAnySetterStr="{\"idCard\":\"43268825255522222\",\"userSex\":\"男\",\"id\":1767798780627279873,\"username\":\"坤坤\",\"userAge\":18,\"org\":{\"id\":1699967647585800192,\"orgName\":\"阿里巴巴\",\"address\":\"浙江杭州\"},\"roleList\":null}";UserInfo readUserByAnySetter = objectMapper.readValue(jsonAnySetterStr, UserInfo.class);System.out.println(readUserByAnySetter);
这时idCard
会被存放到Map
中:
2.14 @JsonAnyGetter
@JsonAnyGetter
则用于在序列化时,将Map
集合中的内容以对象属性的方式进行输出。
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonAnyGetter {boolean enabled() default true;
}
直接将上面@JsonAnySetter
反序列化的对象进行序列化时,和之前的JSON
内容不一致:
{"collect":{"idCard":"43268825255522222","id":1767798780627279873},"userAge":18,"userSex":"男","mobilePhone":null}
添加@JsonAnyGetter
:
@JsonAnyGetterpublic Map<String, Object> getCollect() {return collect;}
输出结果如下:
{"mobilePhone":null,"idCard":"43268825255522222","id":1767798780627279873}
2.15 @JacksonInject
@JacksonInject
标识该属性值不是直接从JSON
数据中读取,而是通过注入的方式,根据ObjectMapper
的配置或其他机制提供。
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JacksonInject {// 逻辑ID,根据该ID从配置或者其他环境中查询对应的值并注入String value() default "";OptBoolean useInput() default OptBoolean.DEFAULT;// 省略........
}
应用场景:
- 依赖注入:在对象创建时,可能有一些值需要通过外部机制(如
Spring
框架的依赖注入)提供,而不是从JSON
中解析,这时可以使用@JacksonInject
来标记这些属性 - 默认值:有时我们可能希望为某些属性提供默认值,而这些默认值不是从
JSON
数据中读取的。使用@JacksonInject
可以确保在没有从JSON
中找到对应值的情况下使用这些默认值。 - 上下文相关值:当处理与特定上下文相关的数据时,可能需要将某些上下文信息注入到对象中。这些上下文信息可能不是
JSON
数据的一部分,而是由调用方或应用程序的其他部分提供的
添加@JacksonInject
注解:
@JacksonInject(value = "phone")private String phone;
使用InjectableValues
注入默认值:
// 设置默认值InjectableValues.Std injectableValues = new InjectableValues.Std();injectableValues.addValue("phone","13788889999");objectMapper.setInjectableValues(injectableValues);// 反序列化String jsonInjectStr="{}";UserInject readUserByInject = objectMapper.readValue(jsonInjectStr, UserInject.class);System.out.println(readUserByInject);
输出结果如下:
User{name='null', phone='13788889999'}
2.16 @JsonCreator
@JsonCreator
指定反序列化时构造对象实例使用的方法。
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonCreator {// 构建者类型Mode mode() default JsonCreator.Mode.DEFAULT;public static enum Mode {DEFAULT,DELEGATING,PROPERTIES,DISABLED;private Mode() {}}
}
添加无参、有参的构造方法:
public UserInject() {System.out.println("无参构造");}public UserInject(String name, String phone) {this.name = name;this.phone = phone;System.out.println("有参构造");}
进行序列化:
String jsonCreatorStr="{\"phone\":\"13566666665\",\"name\":\"张三\"}";UserInject readUserByCreator = objectMapper.readValue(jsonCreatorStr, UserInject.class);System.out.println(readUserByCreator);
输出结果中,可以看到默认使用的是无参构造和setter
方法:
无参构造
setPhone
setName
User{name='张三', phone='13566666665'}
可以使用 @JsonCreator
指定使用的构造函数,使用@JsonProperty
指定属性映射关系:
@JsonCreatorpublic UserInject(@JsonProperty("name") String name, @JsonProperty(value = "phone") String phone) {this.name = name;this.phone = phone;System.out.println("有参构造");}
输出结果如下:
有参构造
User{name='张三', phone='13566666665'}
2.17 @JsonTypeInfo
@JsonTypeInfo
用于多态类型时指定子类类型,以便在反序列化时能够准确地重建原始对象类型。
@Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonTypeInfo {// 定义如何包含类型信息Id use();// 定义类型信息应该在哪里包含As include() default JsonTypeInfo.As.PROPERTY;// 当 use 设置为 Id.AS_PROPERTY 时,这个属性定义了包含类型信息的 JSON 属性的名称String property() default "";// 当无法确定具体的子类型时,使用的默认实现类Class<?> defaultImpl() default JsonTypeInfo.class;// 定义是否传递类型标识符值的属性boolean visible() default false;// 确定在其子类型的多态反序列化过程中是否应严格要求类型IDOptBoolean requireTypeIdForSubtypes() default OptBoolean.DEFAULT;
例如,定义了一个抽象类Person
,它有两个类型Student
、Teacher
,并定义一个返回对象PersonVO
定义了属性为Person
实例集合:
public abstract class Person {public String name;// getters and setters
}public class Student extends Person{
}public class Teacher extends Person{
}public class PersonVO {List<Person> personList;// getters and setters
}
执行序列化和反序列化操作:
Student student=new Student();student.setName("坤坤童鞋");Teacher teacher=new Teacher();teacher.setName("悠上老师");List<Person> personList=new ArrayList<>();personList.add(student);personList.add(teacher);PersonVO personVO=new PersonVO();personVO.setPersonList(personList);String jsonStrByPerson = objectMapper.writeValueAsString(personVO);System.out.println(jsonStrByPerson);PersonVO readUserByPerson = objectMapper.readValue(jsonStrByPerson, PersonVO.class);System.out.println(readUserByPerson);
反序列化时,直接调用抽象类Person
的构造导致报错(应该调用具体的实现类的构造):
{"personList":[{"name":"坤坤童鞋"},{"name":"悠上老师"}]}
Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.pearl.jacksoncore.demo.databind.anno.Person` (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type informationat [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 16] (through reference chain: com.pearl.jacksoncore.demo.databind.anno.PersonVO["personList"]->java.util.ArrayList[0])
在Person
类上添加@JsonTypeInfo
,property
配置表示使用@class
作为类型属性名,JsonTypeInfo.Id.CLASS
表示使用全限定类名作为类型值:
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public abstract class Person {}
再次执行,可以看到序列化时,包含了一个对象的Class
类型属性键值对,所以在反序列时使用指定类型的构造,正确输出:
{"personList":[{"@class":"com.pearl.jacksoncore.demo.databind.anno.Student","name":"坤坤童鞋"},{"@class":"com.pearl.jacksoncore.demo.databind.anno.Teacher","name":"悠上老师"}]}
com.pearl.jacksoncore.demo.databind.anno.PersonVO@32eff876
2.18 @JsonSubTypes
@JsonSubTypes
用于指定用于多态类型时,指定子类的类型标识。
@Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonSubTypes {Type[] value();boolean failOnRepeatedNames() default false;
下方示例中,@JsonTypeInfo
表示使用type
作为子类类型属性名,使用自定义名称作为子类类型值,@JsonSubTypes
指定Student
类的名称为stu
,Teacher
类的名称为stu
:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({@JsonSubTypes.Type(value = Student.class,name = "stu"),@JsonSubTypes.Type(value = Teacher.class,name = "tea")
})
public abstract class Person {//......}
序列化后输出如下:
{"personList":[{"type":"stu","name":"坤坤童鞋"},{"type":"tea","name":"悠上老师"}]}
2.19 @JsonTypeName
@JsonTypeName
作用在类上,用于添加当前类的类型标识符,常用于配合@JsonTypeInfo
多态类型处理问题。
@Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonTypeName {String value() default "";
}
在Student
类上添加注解:
@JsonTypeName("student111111")
public class Student extends Person{//......}
可以看到在序列化后携带了配置的类型标识:
{"personList":[{"student111111":{"name":"坤坤童鞋"}},{"teacher":{"name":"悠上老师"}}]}
2.20 @JsonTypeId
除了使用@JsonTypeName
还可以使用@JsonTypeId
添加类型标识,可以添加在属性、方法、参数上。
@Target({ElementType.ANNOTATION_TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonTypeId {
}
示例代码:
public class Student extends Person{@JsonTypeIdprivate String typeId;// getters and setters
}public class Student extends Person{@JsonTypeIdprivate String typeId;// getters and setters
}```java
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({@JsonSubTypes.Type(value = Student.class,name = "sut11111111"),@JsonSubTypes.Type(value = Teacher.class,name = "tea1111111")
})
输出结果:
{"personList":[{"sut11111111":{"name":"坤坤童鞋"}},{"tea1111111":{"name":"悠上老师"}}]}
相关文章:
Jackson 2.x 系列【6】注解大全篇二
有道无术,术尚可求,有术无道,止于术。 本系列Jackson 版本 2.17.0 源码地址:https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 注解大全2.11 JsonValue2.12 JsonKey2.13 JsonAnySetter2.14 JsonAnyGetter2.15 …...
在低成本loT mcu上实现深度神经网络端到端自动部署-深度神经网络、物联网、边缘计算、DNN加速——文末完整资料
目录 前言 DNN 量化神经网络 并行超低功耗计算范式 面向内存的部署 结果 原文与源码下载链接 REFERENCES 前言 在物联网极端边缘的终端节点上部署深度神经网络( Deep Neural Networks,DNNs )是支持普适深度学习增强应用的关键手段。基于低成本MCU的终端节点…...
【linux】基础IO |文件操作符
需要掌握:操作文件,本质:进程操作文件。进程和文件的关系 向文件中写入,本质上向硬件中写入->用户没有权利直接写入->操作系统是硬件的管理者,我们可以通过操作系统往硬件写入->操作系统必须提供系统调用&…...
探索 2024 年 Web 开发最佳前端框架
前端框架通过简化和结构化的网站开发过程改变了 Web 开发人员设计和实现用户界面的方法。随着 Web 应用程序变得越来越复杂,交互和动画功能越来越多,这是开发前端框架的初衷之一。 在网络的早期,网页相当简单。它们主要以静态 HTML 为特色&a…...
解决: MAC ERROR [internal] load metadata for docker.io/library/openjdk:17
错误信息: ERROR [internal] load metadata for docker.io/library/openjdk:17 ERROR: failed to solve: openjdk:17: error getting credentials - err: exit status 1, out: 解决方法: running this command rm ~/.docker/config.json before …...
View事件分发
MotionEvent 1.简介 MotionEvent 是Android系统中一个非常重要的类,它代表了屏幕上发生的触摸事件。当用户在屏幕上触摸、滑动或者长按时,都会生成一个MotionEvent对象,这个对象包含了触摸动作的各种信息。 2.事件类型 ACTION_DOWN&#x…...
监听页面的使用时间
如果是比较新的vue架构(推荐,参考若依) 监听create()和destory()两个函数,写通用的js调用函数,在路由守卫的时候使用,就可以获取到每个页面停留时间 如果是比…...
【 yolo红外微小无人机-直升机-飞机-飞鸟目标检测】
yolo无人机-直升机-飞机-飞鸟目标检测 1. 小型旋翼无人机目标检测2. yolo红外微小无人机-直升机-飞机-飞鸟目标检测3. yolo细分类型飞机-鸟类-无人机检测4. yolo红外大尺度无人机检测5. 小型固定翼无人机检测6. 大型固定翼无人机检测7. yolo航空俯视场景下机场飞机检测 1. 小型…...
Redis与数据库的一致性
Redis与数据库的数据一致性 在使用Redis作为应用缓存来提高数据的读性能时,经常会遇到Redis与数据库的数据一致性问题。简单来说,就是同一份数据同时存在于Redis和数据库,如何在数据更新的时候,保证两边数据的一致性。首先&#…...
使用maxwell实时同步mysql数据到kafka
一、软件环境: 操作系统:CentOS release 6.5 (Final) java版本: jdk1.8 zookeeper版本: zookeeper-3.4.11 kafka 版本: kafka_2.11-1.1.0.tgz maxwell版本:maxwell-1.16.0.tar.gz 注意 : 关闭所有机器的防火墙,同时注意…...
知识图谱与大数据:区别、联系与应用
目录 前言1 知识图谱1.1 定义1.2 特点1.3 应用 2 大数据2.1 定义2.2 应用 3. 区别与联系3.1 区别3.2 联系 结语 前言 在当今信息爆炸的时代,数据成为了我们生活和工作中不可或缺的资源。知识图谱和大数据是两个关键概念,它们在人工智能、数据科学和信息…...
Nagios工具
一 nagios 相关概念 Nagios 是一款开源的免费网络监视工具,能有效监控 Windows、Linux 和 Unix 的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第 一时间通知网站运维人员,在状态恢复后…...
微信小程序全局数据共享
文章目录 安装MobX相关的包根目录创建store文件夹,添加store.js文件绑定到页面中绑定到组件 mobx-miniprogram和mobx-miniprogram-bindings实现全局数据共享 mobx-miniprogram用来创建Store实例对象 mobx-miniprogram-bindings用来把Store中的共享数据或方法&…...
算法训练营第24天|回溯算法理论基础 LeetCode 77.组合
终于把二叉树做完了!开始新的篇章,回溯! 回溯算法理论基础 回溯算法题目分类: 1.组合 2.分割 3.子集 4.排列 5.棋盘问题 什么是回溯? 回溯叫做回溯搜索法,是一种搜索方式。回溯是递归的副产品&…...
pip永久修改镜像地址
修改命令: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/ 效果: 会在C:\Users\PC(用户名)\AppData\Roaming\pip目录下新增或修改文件pip.ini 文件内容: [global] index-url https://pypi.tuna.tsinghua.e…...
RK3588平台开发系列讲解(硬件篇-功能外设2)
USB2.0/USB3.0 电路 RK3588 芯片内置两个USB3.0 OTG控制器(内嵌2个USB2.0 OTG,下图绿色处),1个USB3.0 HOST 控制器,2个USB2.0 HOST控制器。 这些控制器与PHY的内部复用图如下: USB3.0 OTG0 控制器支持SS/H…...
SpringBoot学习记录
SpringBoot是用于加速Spring开发的。 我们先来看看如何使用SpringBoot来创建一个基于Web的程序,可以发现相较于SpringMVC其有巨大改变。 3.开发控制器类 GetMapping("/{id}")public String getById(PathVariable Integer id){System.out.println("…...
财富池指标--通达信顾比均线实战指标免费源码
顾比均线是由两组均线构成,短期组为3、5、8、10、12、15。长期组为:30、35、40、45、50、60。顾比均线由澳大利亚的投资家戴若-顾比先生发明,因此叫顾比线。 顾比均线可以广泛运用于股票、期货和外汇交易中,只要是能运用K线图的投…...
AJAX(一):初识AJAX、http协议、配置环境、发送AJAX请求、请求时的问题
一、什么是AJAX 1.AJAX 就是异步的JS和XML。通过AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。 2.XML 可扩展标记语言。XML被设计用来传输和…...
idea常用的快捷键总结:
idea常用的快捷键总结: Ctrl相关的: Ctrl F 在当前文件进行文本查找 (必备) Ctrl R 在当前文件进行文本替换 (必备) Ctrl Z 撤销 (必备) Ctrl Y 删除光标所在行 或 删除选中的…...
LeetCode 热题 100 题解(一):哈希部分
《LeetCode热题 100》 经过了两个多月,终于刷完了代码随想录的题目,现在准备开始挑战热题一百了,接下来我会将自己的题解以博客的形式同步发到力扣和 c 站,希望在接下来的征程中与大家共勉! 题组一:哈希 题…...
C语言 | qsort()函数使用
目录: 1.qsort介绍 2.使⽤qsort函数 排序 整型数据 3.使⽤qsort函数 排序 结构体数据 4. qsort函数的模拟实现冒泡排序 qsort()函数 是一个 C语言编译器函数库自带的排序函数, 它可以对指定数组(包括字符串,二维数组&#x…...
继承的特点 | java
/*Java中继承的特点:A:Java只支持单继承,不支持多继承。 B:Java支持多层继承(继承体系),间接继承 */class Father(){} class Mother(){}class son extends Father(){} // 正确 class son2 extends Father , Mother {} // 不正确 1. Java只支持单继承…...
6、jenkins项目构建类型-项目类型介绍
文章目录 一、自由风格项目1、拉取代码2、演示改动代码后的持续集成二、Maven项目构建三、Pipeline流水线项目构建(☆☆☆)1、Pipeline简介(1)概念(2)使用Pipeline有以下好处(3)如何创建Jenkins Pipeline呢?2、安装Pipeline插件3、Pipeline语法快速入门(1)Declarati…...
指针函数的应用——找出哪些学生有不及格的科目
下面的代码实现了以下功能: 定义了一个函数 getFailStudent,它接收一个指向整数数组的指针,并遍历该数组,查找是否存在不及格的成绩。如果找到了不及格的成绩,就返回指向不及格学生所在行的指针;否则返回 N…...
【微服务】Gateway
文章目录 1.基本介绍官方文档:https://springdoc.cn/spring-cloud-gateway/#gateway-starter1.引出网关2.使用网关服务架构图3.Gateway网络拓扑图(背下来)4.Gateway特性5.Gateway核心组件1.基本介绍2.断言3.过滤 6.Gateway工作机制 2.搭建Gat…...
王道C语言督学营OJ课后习题(课时14)
#include <stdio.h> #include <stdlib.h>typedef char BiElemType; typedef struct BiTNode{BiElemType c;//c 就是书籍上的 datastruct BiTNode *lchild;struct BiTNode *rchild; }BiTNode,*BiTree;//tag 结构体是辅助队列使用的 typedef struct tag{BiTree p;//树…...
Filter、Listener、AJAX
Filter 概念:Filter 表示过滤器,是JavaWeb三大组件(Servlet、Filter、 Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。 过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感…...
FastAPI+React全栈开发04 FastAPI概述
Chapter01 Web Development and the FARM Stack 04 Introducing FastAPI FastAPIReact全栈开发04 FastAPI概述 Now we will look at a brief introducion to the Python REST-API framework of choice - FastAPI. Additionally, we will go over a high-level overview of t…...
基于单片机的二维码LCD显示控制设计
**单片机设计介绍,基于单片机的二维码LCD显示控制设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的二维码LCD显示控制设计是一个集硬件、软件与通信于一体的综合性项目。此设计的主要目标是实现单片机…...
MacBook怎么做网站/新乡seo网络推广费用
FCKeditor 是个很优秀的 Web 编辑器,很多项目甚至产品中都在用它。但它默认的上传文件目录为/userfiles/,也就是说,如果在编辑器中上传了图片等文件的话,只能在/userfiles/文件夹下。对于多用户会员系统的网站系统,这显…...
网站建设总体设计/国际新闻头条
要想深入了解Java必须对JDK的组成, 本文对JDK6里的目录做了基本的介绍,主要还是讲解 了下JDK里的各种可执行程序或工具的用途 Java(TM) 有两个平台 JRE 运行平台,包括Java虚拟机,运行类库,java应用程序装载器。 JRE不…...
thinkphp企业网站开发/网络推广渠道有哪些
比如下面的代码中实现了一个只能转换User对象的MessageConverter,底层使用的是FastJson,在进行发送消息时重置了user的name属性,加上了t-前缀。 然后为了使它生效,我们需要把它定义为一个bean,并标注StreamMessageConv…...
做一个网站的基本步骤/一个新品牌如何推广
Q1. 环境预准备 绝大多数MON创建的失败都是由于防火墙没有关导致的,亦或是SeLinux没关闭导致的。一定一定一定要关闭每个每个每个节点的防火墙(执行一次就好,没安装报错就忽视): CentOS sed -i s/SELINUX.*/SELINUXdisabled/ /etc/selinux…...
wordpress 中文付费主题/seo网页推广
cellfun函数 n A{Hello, MATLAB, I love MATLAB, MATLAB is powerful, MATLAB is the language of technical computer} ;试统计A中每个元胞......函数语法为: Bcellfun(fun,A) ; fun 表示实现运算的 匿名函数或函数句柄,A是被实施运算的元胞数组。cellfun函数更详 细的使用说明…...
我想注册网站我怎么做/电商seo是什么
thinkphp动态注册路由 一、总结 1、thinkphp使用路由步骤:a、config配置文件中开启路由 b、Route类的rule方法创建路由(在Routephp中)Route::rule(/,index/index/index); 2、带参数的路由:引号参数:Route::rule(cours…...