Java一般操作

    • 对象序列化和反序列化
      • 码代码
      • 结果输出
    • 对象序列化中字段为Null的处理
    • Web项目下非Spring托管类中拿Spring Bean的方法
    • java.security.InvalidKeyException: Illegal key size
    • 实例Slf4j的Logger
    • Redis持久化过程中出错解决
    • Tomcat启动随机数生成过慢
    • Docker 错误响应:TLS握手超时
    • MyBatis:Dao方法not found绑定异常
    • Idea启动junit测试方法异常Command line is too long
    • Springboot Web项目下非Spring托管类中拿Spring Bean的方法
    • fastjson反序列化java date
  • java用fastjson反序列化模板类
  • spring web项目下非controller过程中获取request、response

对象序列化和反序列化

码代码

测试

    @Testpublic void testProc5(){Employee employee = new Employee();Employee employee2 = new Employee();String employeeStr;employee.setName("暗室逢灯");employee.setAge(26);/*** JSONObject.toJSONString(Object)* 此方法将指定的对象序列化为其等效的Json表示形式。* 请注意,如果任何对象字段都是一般类型,则此方法可以正常工作,只是对象本身不是一般类型此方法可能无法工作。* 如果您想将对象写入Writer,请使用writeJSONString(写入器、对象、SerializerFeature[])。*/employeeStr = JSONObject.toJSONString(employee);System.out.println(employeeStr);/*** JSONObject.parseObject(String)* 该方法把字符串转换为JSONObject** toJavaObject(Class)* 该方法把JSONObject转换为指定类的对象*/employee2 = JSONObject.parseObject(employeeStr).toJavaObject(Employee.class);System.out.println(employee2);}

结果输出

{"age":26,"name":"暗室逢灯"}
Employee{id=null, name='暗室逢灯', age=26, salary=null}

POJO

package cn.Entity;import java.io.Serializable;public class Employee implements Serializable {private Integer id;private String name;private Integer age;private Float salary;@Overridepublic String toString() {return "Employee{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", salary=" + salary +'}';}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Float getSalary() {return salary;}public void setSalary(Float salary) {this.salary = salary;}public Employee(Integer id, String name, Integer age, Float salary) {this.id = id;this.name = name;this.age = age;this.salary = salary;}public Employee() {}
}

对象序列化中字段为Null的处理

忽略Null字段

     String string  = JSON.toJSONString(list, SerializerFeature.WriteMapNullValue);

显示Null字段

        Employee employee = new Employee();employee.setName("aaa");String string  = JSON.toJSONString(employee, SerializerFeature.WRITE_MAP_NULL_FEATURES ,SerializerFeature.PrettyFormat  );System.out.println(string);

Web项目下非Spring托管类中拿Spring Bean的方法

            WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();Object obj = wac.getBean(UserInfoDao.class);

java.security.InvalidKeyException: Illegal key size

为了数据代码在传输过程中的安全,很多时候我们都会将要传输的数据进行加密,然后等对方拿到后再解密使用。我们在使用AES加解密的时候,在遇到128位密钥加解密的时候,没有进行什么特殊处理;然而,在使用256位密钥加解密的时候,如果不进行特殊处理的话,往往会出现这个异常java.security.InvalidKeyException: Illegal key size。

为什么会产生这样的错误?

JDK中包含有JRE(Java Runtime Environment,即:Java运行环境),JRE中包括Java虚拟机(Java
Virtual Machine)、Java核心类库和支持文件。在Java的核心类库中有一个JCE(Java Cryptography
Extension),JCE是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication
Code(MAC)算法的框架和实现,所以这个是实现加密解密的重要类库。

在我们安装的JRE目录下有这样一个文件夹:%JAVE_HOME%\jre\lib\security(%JAVE_HOME%是自己电脑的Java路径,一版默认是:C:\Program
Files\Java,具体看自己当时安装JDK和JRE时选择的路径是什么),其中包含有两个.jar文件:“local_policy.jar
”和“US_export_policy.jar”,也就是我们平时说的jar包,再通俗一点说就是Java中包含的类库(Sun公司的程序大牛封装的类库,供使用Java开发的程序员使用),这两个jar包就是我们JCE中的核心类库了。JRE中自带的“local_policy.jar
”和“US_export_policy.jar”是支持128位密钥的加密算法,而当我们要使用256位密钥算法的时候,已经超出它的范围,无法支持,所以才会报:“java.security.InvalidKeyException:
Illegal key size or default parameters”的异常。

解决方案:去官方下载JCE无限制权限策略文件。

JDK7的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
JDK8的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html


用jce policy解压后的包去覆盖jre security下的文件,然后重启出现异常的程序就ok了。

实例Slf4j的Logger

private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(HomeController.class);

Redis持久化过程中出错解决

出错日志:

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

MISCONF Redis被配置为保存RDB快照,但目前无法在磁盘上存留。可能修改数据集的命令被禁用。请检查Redis日志,了解有关错误的详细信息。

在redis-cli下输入:

config set stop-writes-on-bgsave-error no

Tomcat启动随机数生成过慢

启动日志:

31-Oct-2019 14:27:07.400 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
31-Oct-2019 14:27:07.400 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.45
31-Oct-2019 14:27:07.407 INFO [localhost2w-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/apache-tomcat-8.5.45/webapps/manager]
31-Oct-2019 14:27:07.702 INFO [localhost2w-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

卡在这里几分钟甚至十多分钟才能完全启动。

原因:Tomcat的random生成随机数太慢。
tomcat/bin/下的
setenv.sh里增加

JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/urandom"

替换tomcat本身的random,提升tomcat启动速度。


Docker 错误响应:TLS握手超时

我们在使用docker去search、pull 镜像的时候可能会遇到的 response异常:

Error response from daemon: Get https://index.docker.io/v1/search?q=mongo&n=25: net/http: TLS handshake timeout

使用dig命令找到可用的IP

[root@localhost ~]# dig @114.114.114.114 registry-1.docker.io; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> @114.114.114.114 registry-1.docker.io
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62765
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;registry-1.docker.io.          IN      A;; ANSWER SECTION:
registry-1.docker.io.   30      IN      A       34.199.77.19
registry-1.docker.io.   30      IN      A       3.224.75.242
registry-1.docker.io.   30      IN      A       3.224.11.4
registry-1.docker.io.   30      IN      A       3.226.66.79
registry-1.docker.io.   30      IN      A       3.221.133.86
registry-1.docker.io.   30      IN      A       34.197.189.129
registry-1.docker.io.   30      IN      A       3.210.179.11
registry-1.docker.io.   30      IN      A       34.199.40.84;; Query time: 14 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Sat Dec 07 06:58:22 EST 2019
;; MSG SIZE  rcvd: 177

如果没有dig命令:

yum install bind-utils

/etc/hosts 配置映射


34.199.40.84    registry-1.docker.io

然后再去pull和search就okay了。

MyBatis:Dao方法not found绑定异常

项目运行时出现的MyBatis异常:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 异常

org.apache.ibatis.binding.BindingException:Invalid bound statement (not found): com.kev.team.sys.dao.SysUserInfoDao.getBackListorg.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:178)org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:38)org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:49)org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:42)com.sun.proxy.$Proxy94.getBackList(Unknown Source)

引发这个异常的原因常常是我们自己在配置MyBatis时粗心遗漏或者写错了配置项:

1、Mapper的xml配置文件包路径写错、namespace、resultType、resultMap。

2、还有一个是在MyBatis的mapper包扫描路径遗漏,比如下面这个:

修正配置,rebuild,run 项目检测结果。

Idea启动junit测试方法异常Command line is too long

Error running 'TestClass.testProc': Command line is too long. Shorten command line for TestClass.testProc or also for Android JUnit default configuration.

解决方式,改变运行命令

Springboot Web项目下非Spring托管类中拿Spring Bean的方法

@Component
@Lazy(false)
public class ApplicationContextRegister implements ApplicationContextAware {private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationContextRegister.class);private static ApplicationContext APPLICATION_CONTEXT;/**  * 设置spring上下文  *  * @param applicationContext spring上下文  * @throws BeansException  */@Override  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {LOGGER.debug("ApplicationContext registed-->{}", applicationContext);APPLICATION_CONTEXT = applicationContext;}public static ApplicationContext getApplicationContext() { return APPLICATION_CONTEXT;  }
}
            wxOpenBusinessService = ApplicationContextRegister.getApplicationContext().getBean(WxOpenBusinessService.class);

fastjson反序列化java date

@JSONField(format = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
private Date createdAt;
@JSONField(format = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
private Date updatedAt;
{"createdAt":"2019-12-12T14:53:14.015331+08:00",
"updatedAt":"2021-10-12T15:55:03.751704+08:00"
}

java用fastjson反序列化模板类

                if (JSONValidator.from(body).validate()) {JSONObject jsonObject = JSON.parseObject(body);System.out.println(jsonObject);Result<UserInfo> userInfos = new Result<>();userInfos = jsonObject.toJavaObject(new TypeReference<Result<UserInfo>>(){});System.out.println(JSON.toJSONString(userInfos));}

spring web项目下非controller过程中获取request、response

        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = servletRequestAttributes.getRequest();HttpServletResponse response = servletRequestAttributes.getResponse();

Java一般操作 对象序列化和反序列化相关推荐

  1. Xson:Java对象序列化和反序列化工具

    1. Xson 介绍  Xson是一个Java对象序列化和反序列化程序.支持Java对象到字节数组的序列化,和从字节数组到Java对象的反序列化.  地址:https://github.com/xso ...

  2. Java对象序列化与反序列化

    什么是序列化与反序列化 当两个进程在进行远程通信时,彼此可以发送各种类型的数据.无论是何种类型的数据,都会以二进制序列的形式在网络上传送.发送方需要把这个Java对象转换为字节序列,才能在网络上传送: ...

  3. java培训教程分享:Java中怎样将数据对象序列化和反序列化?

    本期为大家介绍的java培训教程是关于"Java中怎样将数据对象序列化和反序列化?"的内容,相信大家都知道,程序在运行过程中,可能需要将一些数据永久地保存到磁盘上,而数据在Java ...

  4. 代码即财富之我学Java对象序列化与反序列化(2)

    2019独角兽企业重金招聘Python工程师标准>>> 我们在程序创建的Java对象都是存在于JVM内存中的,也就是Java对象的生命周期一定不会长于JVM,所以如何以一种持久化的方 ...

  5. Java中的对象序列化操作

    文章目录 1 Java中的对象序列化操作 1 Java中的对象序列化操作 首先看一下对象序列化的操作步骤: 创建一个类,继承Serializable接口 创建对象 将对象写入文件 从文件读取对象信息 ...

  6. C++实现对象序列化和反序列化(读写二进制文件)操作

    相关函数介绍 在我们的C语言中读写二进制文件一般使用的fread.fwrite全局函数,当然也可以使用更底层的read和write函数.在我们的C++中 通过ofstream 和 ifstream 对 ...

  7. FastJson实现复杂对象序列化与反序列化

    一.认识FastJson 1.优势 fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,第三方独立测试结果说明比gson快大约6倍,fastjson采用独创的算法 ...

  8. 【译】Java中的对象序列化

    前言 好久没翻译simple java了,睡前来一篇. 译文链接: http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在 ...

  9. 从零开始学前端:对象序列化与反序列化、冒泡排序、数组去重 --- 今天你学习了吗?(JS:Day11)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(JS) 复习:从零开始学前端:字符串和数组的方法 - 今天你学习了吗?(JS:Day10) 文章目录 从零开始学前端:程序猿小白也可以完全 ...

  10. C#对象序列化与反序列化zz

    C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍.......................... ...

最新文章

  1. python列表按值排序_json的python排序列表(按值)
  2. 【9915】乘积最大
  3. 谷歌Chrome 11对早期开发者开放使用
  4. 【Android】Camera 使用浅析
  5. 关于fetch api这点事
  6. java线程提高速度_如何在JAVA中减慢线程速度
  7. zset中的score_Redis 在项目中合理使用经验总结
  8. 盒马把ID玩没了?更名“盒盒马马”后原昵称改不回来,网友笑翻了:官微急了...
  9. 企业信息化规划的重要性
  10. numpy下载失败解决方法
  11. 160个CrackMe破解思路合集
  12. 解决ADS1.2报错Cannot obtain license
  13. android gridview textview,gogo体育官方网站-gogo体育官方网站
  14. 华为Android10怎样root,华为M2平板10.0怎么ROOT 华为M2超级权限图文教程
  15. 产品经理如何做好需求调研
  16. [js]在10月31日设置月份为11月,会变成12月的问题
  17. 【Linux】Ubuntu20网络频繁掉线解决
  18. 从0开始学习 GitHub 系列之「04.向GitHub 提交代码」----转载自stormzhang 原创文章
  19. 报表工具轻松搞定卡片式报表
  20. python语言是解释型语言-解释型语言python

热门文章

  1. 1075c语言程序设计答案,山东理工大学ACM平台题答案关于C语言 1075 Doubles
  2. 实验:IP 与 ICMP 分析
  3. 千呼万唤始出来的IDEA笔记插件mdNote
  4. 中国新能源汽车行业十四五展望规划与投资决策建议报告2022版
  5. 必备知识:工业相机相关知识(初学者必备)
  6. 彻底卸载vscode Linux,Linux环境中Visual Studio Code 安装配置及其卸载(详细教程)
  7. 图像坐标球面投影_晶体的球面坐标与球面投影
  8. 422器件与lvds接收器的区别_TVS管与ESD保护二极管的区别
  9. 爬虫抓图全网最新方法,这一次终于是4k高清美图,只因为我不下载JPG图片!
  10. 计算机组成原理——如何理解计算机的运算速度以及运算速度的相关计算CPI/IPS/f/T