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

河北秦皇岛建设局网站企业官方网站建设教程

河北秦皇岛建设局网站,企业官方网站建设教程,宿迁经济技术开发区,网络广告营销典型案例陈老老老板#x1f9b8;#x1f468;‍#x1f4bb;本文专栏#xff1a;SpringBoot篇#xff08;主要讲一些与springboot整合相关的内容#xff09;#x1f468;‍#x1f4bb;本文简述#xff1a;本文讲一下Jackson常见用法#xff0c;超级详细。#x1f468;‍ ‍本文专栏SpringBoot篇主要讲一些与springboot整合相关的内容 ‍本文简述本文讲一下Jackson常见用法超级详细。 ‍上一篇文章《SpringBoot篇》25.SpringBoot整合ActiveMQ ‍有任何问题都可以私聊我我能帮得上的一定帮忙感谢大佬们支持。 我认为人人都可以学好编程我愿意成为你的领路人需内推私聊 一、Jackson简介 说明本篇讲的是Jackson的详细用法Jackson工具类在文章最后直接复制粘贴即可使用。 Jackson是公司中必用的组件之一常用的还用阿里的Fastjson但是由于一些原因bug与漏洞是在是太多在注重安全的公司直接被pass还有就是谷歌的Gson这个没用过不太了解。 Spring MVC 的默认 json 解析器便是 Jackson。 Jackson 优点很多。 Jackson 所依赖的 jar 包较少 简单易用。与其他 Java 的 json 的框架 Gson 等相比 Jackson 解析大的 json 文件速度比较快Jackson 运行时占用内存比较低性能比较好Jackson 有灵活的 API可以很容易进行扩展和定制。 额外了解 Jackson 的 1.x 版本的包名是 org.codehaus.jackson 当升级到 2.x 版本时包名变为com.fasterxml.jackson。 Jackson 有三个核心包分别是 Streaming、Databid、Annotations通过这些包可以方便的对 JSON 进行操作. jackson-core核心包提供基于流模式解析的相关 API它包括 JsonPaser 和 JsonGenerator。 Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。jackson-annotations:注解包提供标准注解功能.jackson-databind :数据绑定包 提供基于对象绑定 解析的相关 API ObjectMapper 和树模型 解析的相关 API JsonNode基于对象绑定 解析的 API 和树模型解析的 API 依赖基于流模式解析的 API。包含上面两个包只导入这个坐标即可。 运行环境 idea2020.2jdk1.8springboot 2.7.9 下载demo直接去我的资源下载即可Jackson实例-附工具类 二、Json简介 说明 作为Java开发一定要学习Json在现在的前后端分离的项目中Json是最常见的数据交换格式。比如SpringBoot中RequestBody注解就是作为接收Json格式的注解在使用Postman进行测试时传输的raw-json也是Json格式数据。 JSON表示结构 对象数组: 对象结构以”{”大括号开始以”}”大括号结束,中间部分由0或多个以””分隔的”key(关键字)/value(值)”对构成关键字和值之间以””分隔语法结构如代码。这里给一个示例。 {array: [1,2,3],boolean: true,name: cllb,null: null,age: 12345,object: {height: 100,color: 红色},string: 陈老老老板 }三、springboot整合Jackson 1.创建项目 说明 创建一个空springboot项目2.7.9版本。这里就不过多复述了创建时将lombok组件选上十分方便无需再写Get/Set方法。 注意可以看到导入databind包会自动导入剩下两个包。 2.导入坐标 说明 可以看到导入databind包会自动导入剩下两个包。 dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.13.3/version /dependency3.配置文件 a.配置文件配置 properties格式 #指定日期格式比如yyyy-MM-dd HH:mm:ss或者具体的格式化类的全限定名 spring.jackson.date-format #指定日期格式化时区比如America/Los_Angeles或者GMT10. spring.jackson.time-zone #是否开启Jackson的反序列化 spring.jackson.deserialization #是否开启json的generators. spring.jackson.generator #指定Joda date/time的格式比如yyyy-MM-ddHH:mm:ss). 如果没有配置的话dateformat会作为backup spring.jackson.joda-date-time-format #指定json使用的Locale. spring.jackson.locale #是否开启Jackson通用的特性. spring.jackson.mapper #是否开启jackson的parser特性. spring.jackson.parser #指定PropertyNamingStrategy(CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES)或者指定PropertyNamingStrategy子类的全限定类名. spring.jackson.property-naming-strategy #是否开启jackson的序列化. spring.jackson.serialization #指定序列化时属性的inclusion方式具体查看JsonInclude.Include枚举. spring.jackson.serialization-inclusionyml格式 spring:jackson:#日期格式化date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8#设置空如何序列化default-property-inclusion: non_null serialization:#格式化输出 indent_output: true#忽略无法转换的对象fail_on_empty_beans: falsedeserialization:#允许对象忽略json中不存在的属性fail_on_unknown_properties: falseparser:#允许出现特殊字符和转义符allow_unquoted_control_chars: true#允许出现单引号allow_single_quotes: true b.自定义配置 说明 这里直接将Jackson工具类给大家自定义配置指的就是工具类中对于object_mapper的set赋值。什么方法都有演示也直接使用工具类进行。 package com.clllb.jackson.utils;import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.*; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils;import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.List;Slf4j public class JacksonUtil {private static final ObjectMapper OBJECT_MAPPER new ObjectMapper();private static final ObjectMapper OBJECT_MAPPER_SNAKE_CASE new ObjectMapper();// 日期格式化private static final String STANDARD_FORMAT yyyy-MM-dd HH:mm:ss;static {//对象的所有字段全部列入OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.ALWAYS);//取消默认转换timestamps形式OBJECT_MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);//忽略空Bean转json的错误OBJECT_MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);//所有的日期格式都统一为以下的样式即yyyy-MM-dd HH:mm:ssOBJECT_MAPPER.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));//忽略 在json字符串中存在但是在java对象中不存在对应属性的情况。防止错误OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);}static {//对象的所有字段全部列入OBJECT_MAPPER_SNAKE_CASE.setSerializationInclusion(JsonInclude.Include.ALWAYS);//取消默认转换timestamps形式OBJECT_MAPPER_SNAKE_CASE.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);//忽略空Bean转json的错误OBJECT_MAPPER_SNAKE_CASE.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);//所有的日期格式都统一为以下的样式即yyyy-MM-dd HH:mm:ssOBJECT_MAPPER_SNAKE_CASE.setDateFormat(new SimpleDateFormat(STANDARD_FORMAT));//忽略 在json字符串中存在但是在java对象中不存在对应属性的情况。防止错误OBJECT_MAPPER_SNAKE_CASE.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);//转换为下划线OBJECT_MAPPER_SNAKE_CASE.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);}private JacksonUtil() {}/*** 对象转Json格式字符串** param obj 对象* return Json格式字符串*/public static T String obj2String(T obj) {if (obj null) {return null;}try {return obj instanceof String ? (String) obj : OBJECT_MAPPER.writeValueAsString(obj);} catch (JsonProcessingException e) {log.warn(Parse Object to String error : {}, e.getMessage());return null;}}/*** 对象转file* param fileName* param obj*/public static void obj2File(String fileName,Object obj){if (obj null){return;}try {OBJECT_MAPPER.writeValue(new File(fileName),obj);} catch (IOException e) {e.printStackTrace();}}/*** 对象转Json格式字符串; 属性名从驼峰改为下划线形式** param obj 对象* return Json格式字符串*/public static T String obj2StringFieldSnakeCase(T obj) {if (obj null) {return null;}try {ObjectMapper objectMapper OBJECT_MAPPER_SNAKE_CASE;return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);} catch (JsonProcessingException e) {log.warn(Parse Object to String error : {}, e.getMessage());return null;}}/*** 字符串转换为自定义对象 属性名从下划线形式改为驼峰** param str 要转换的字符串* param clazz 自定义对象的class对象* return 自定义对象*/public static T T string2ObjFieldLowerCamelCase(String str, ClassT clazz) {if (StringUtils.isEmpty(str) || clazz null) {return null;}try {ObjectMapper objectMapper OBJECT_MAPPER_SNAKE_CASE;return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz);} catch (Exception e) {log.warn(Parse String to Object error : {}, e.getMessage());return null;}}/*** 字符串转换为自定义对象(List) 属性名从下划线形式改为驼峰** param str 要转换的字符串* param typeReference 自定义对象的typeReference List 对象* return 自定义对象*/public static T ListT string2ListFieldLowerCamelCase(String str, TypeReferenceListT typeReference) {if (StringUtils.isEmpty(str) || typeReference null) {return null;}try {ObjectMapper objectMapper OBJECT_MAPPER_SNAKE_CASE;return objectMapper.readValue(str, typeReference);} catch (Exception e) {log.warn(Parse String to Object error : {}, e.getMessage());return null;}}/*** 对象转Json格式字符串(格式化的Json字符串)** param obj 对象* return 美化的Json格式字符串*/public static T String obj2StringPretty(T obj) {if (obj null) {return null;}try {return obj instanceof String ? (String) obj : OBJECT_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(obj);} catch (JsonProcessingException e) {log.warn(Parse Object to String error : {}, e.getMessage());return null;}}/*** 字符串转换为自定义对象** param str 要转换的字符串* param clazz 自定义对象的class对象* return 自定义对象*/public static T T string2Obj(String str, ClassT clazz) {if (StringUtils.isEmpty(str) || clazz null) {return null;}try {return clazz.equals(String.class) ? (T) str : OBJECT_MAPPER.readValue(str, clazz);} catch (Exception e) {log.warn(Parse String to Object error : {}, e.getMessage());return null;}}/*** 字符串转换为自定义字段转为list* param str* param typeReference* param T* return*/public static T T string2Obj(String str, TypeReferenceT typeReference) {if (StringUtils.isEmpty(str) || typeReference null) {return null;}try {return (T) (typeReference.getType().equals(String.class) ? str : OBJECT_MAPPER.readValue(str, typeReference));} catch (IOException e) {log.warn(Parse String to Object error, e);return null;}}public static T T string2Obj(String str, Class? collectionClazz, Class?... elementClazzes) {JavaType javaType OBJECT_MAPPER.getTypeFactory().constructParametricType(collectionClazz, elementClazzes);try {return OBJECT_MAPPER.readValue(str, javaType);} catch (IOException e) {log.warn(Parse String to Object error : {} e.getMessage());return null;}} } 4.实体类 说明 这里创建一个user实体类 package com.clllb.jackson.PO;import lombok.Data;import java.util.List;Data public class User {private String username;private Integer age;private ListString info;private Long userId; } 项目样图 5.测试类 说明 测试类中直接调工具类中的方法非常简单附输出结果。 a.object类型转Json 说明 使用writeValueAsString方法 Testvoid obj2string(){User user new User();user.setUsername(clllb);user.setAge(24);user.setUserId(1L);ListString infoList new ArrayList();infoList.add(有一百万);infoList.add(发大财);user.setInfo(infoList);String json JacksonUtil.obj2String(user);System.out.println(json);}输出结果 {username:clllb,age:24,info:[有一百万,发大财],userId:1}b.object类型转file 说明 使用writeValue方法 Testvoid obj2file(){User user new User();user.setUsername(clllb);user.setAge(24);user.setUserId(1L);ListString infoList new ArrayList();infoList.add(有一百万);infoList.add(发大财);user.setInfo(infoList);String fileName ccccc;JacksonUtil.obj2File(fileName,user);}输出结果 c.string类型转Object自定义类型 说明 使用readValue方法 Testvoid string2obj(){String json {\username\:\clllb\,\age\:24,\info\:[\有一百万\,\发大财\],\userId\:11};User user JacksonUtil.string2Obj(json, User.class);System.out.println(user);}输出结果 User(usernameclllb, age24, info[有一百万, 发大财], userId11)d.string类型转Object自定义类型list 说明 使用readValue方法,传参变为TypeReference typeReference这里工具类用的重载方法名是相同的。 Testvoid string2objList(){String json [{\username\:\clllb\,\age\:24,\info\:[\有一百万\,\发大财\],\userId\:11},\n {\username\:\陈老老老板\,\age\:25,\info\:[\有一千万\,\发大大财\],\userId\:12}];ListUser user JacksonUtil.string2Obj(json, new TypeReferenceListUser(){});user.forEach(System.out::println);}输出结果 User(usernameclllb, age24, info[有一百万, 发大财], userId11) User(username陈老老老板, age25, info[有一千万, 发大大财], userId12)e.object类型转String(驼峰转下划线) 说明 使用writeValueAsString方法,这里区别看工具类就会发现就是多了一个设置OBJECT_MAPPER_SNAKE_CASE.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE); Testvoid obj2sringSnakeCase(){User user new User();user.setUsername(clllb);user.setAge(24);user.setUserId(11L);ListString infoList new ArrayList();infoList.add(有一百万);infoList.add(发大财);user.setInfo(infoList);String json JacksonUtil.obj2StringFieldSnakeCase(user);System.out.println(json);}输出结果 {username:clllb,age:24,info:[有一百万,发大财],user_id:11}f.string类型下划线转Object类型 font color redb说明/font 使用readValue方法 javaTestvoid string2obj(){String json {\username\:\clllb\,\age\:24,\info\:[\有一百万\,\发大财\],\user_id\:11};User user JacksonUtil.string2Obj(json, User.class);System.out.println(user);}输出结果 User(usernameclllb, age24, info[有一百万, 发大财], userId11)g.string类型(下划线)转Object自定义类型list 说明 使用readValue方法,传参变为TypeReference typeReference这里工具类用的重载方法名是相同的。 Testvoid string2objSnakeCase(){String json [{\username\:\clllb\,\age\:24,\info\:[\有一百万\,\发大财\],\user_id\:11},\n {\username\:\陈老老老板\,\age\:25,\info\:[\有一千万\,\发大大财\],\user_id\:12}];ListUser user JacksonUtil.string2ListFieldLowerCamelCase(json, new TypeReferenceListUser(){});user.forEach(System.out::println);}输出结果 User(usernameclllb, age24, info[有一百万, 发大财], userId11) User(username陈老老老板, age25, info[有一千万, 发大大财], userId12)总结工具类非常好用包含日常所需。Jackson常见用法总结。希望对您有帮助感谢阅读 结束语裸体一旦成为艺术便是最圣洁的。道德一旦沦为虚伪便是最下流的。 勇敢去做你认为正确的事不要被世俗的流言蜚语所困扰。
http://www.hkea.cn/news/14280855/

相关文章:

  • dreamwearver可以做网站吗wordpress封面图七牛
  • 网站 iss手机应用商店下载app
  • 装修网站怎么做推广佛山注册公司流程和费用标准
  • 如果将域名指向网站1688做网站需要多少钱
  • 做文字云的网站管理一个网站的后台怎么做
  • 建设银行网站未响应张家口网站建设公司
  • 武清做网站网站程序元
  • 哪些网站可以做百科参考资料企业网站多少钱
  • 利用access数据库做网站wordpress 弹框
  • 怎么模仿别人做网站建设银行企业网站打不开
  • 怎样做网站外部样式wordpress有几张表
  • 厦门易尔通网站建设好吗各大网站的404
  • 济南制作网站企业企业网站建设原则是
  • 做感恩网站的图片医疗网站优化
  • 前端做的网站上海网页制作方法
  • 仿站网站源码下载三亚新闻发布会直播第十五场
  • 美食网站首页广告设计专业学什么
  • 东莞网站建设收费电商网站建设的关键
  • 柳州门户网站建设公司排名wordpress主题标签
  • 网站类网站开发犯罪吗wordpress建站好不好
  • 百色网站免费建设天汇大厦网站建设公司
  • 国都建设(集团)有限公司网站医院网站和微信公众号建设
  • 网站模板首页常熟智能网站建设
  • 公司企业建站报价wordpress 客户端 出错
  • 十堰建设局网站提高网站流量的软文案例
  • 如何在凡科上做网站wordpress主题git下载
  • 做设计比较好的网站推荐餐饮品牌设计项目
  • 旅游网站建设项目策划书网站seo检测
  • 如何保护我做的网站模板软件开发技术培训课程
  • 红河州建设局门户网站lol做任务领头像网站