本地多线程测试的时候报ExceptionInInitializerError

问题由来:

之前在做一个异步的功能时在本地调试,结果报了ExceptionInInitializerError。

Json需要key首字母为大写

问题由来:

调别人的接口,然后他们的json需要的key名千奇百怪,之前写过一篇blog的做法是通过反射把所有的字段递归存入map,并改首字母为大写,但是这种方式显然非常的愚蠢。

java时间类型转json时自动转化为Long型时间戳

问题由来:

在定义Timestamp,Date这样的时间类型的时候,存数据库时,会自动转化为对应的数据库时间类型,但是在转json的时候发现,会自动转变为long型时间戳。而业务所需要的类型是一个时间格式的String。

Java递归的将JSON所有参数的key的首字母转为大写

问题由来:

这两天对接其他部门的api接口时,发现一个参数检查始终过不去,最后被告知这个参数的首字母必须为大写,这就很恶心了!因为java object自动转出来的json首字母都是小写的!

ThreadLocal和线程的普通成员变量究竟有什么区别?

问题由来:

最近在看多线程的知识,有提到ThreadLocal是一种线程局部变量,每个线程都有相对独立的变量初始化拷贝,是一种以空间换时间的做法。
那么问题来了,

  1. 它和在线程代码里直接写一个普通成员变量有什么区别呢?
  2. 它真的能“以空间换时间”吗?

Java实现 DES算法ECB模式NoPadding填充

问题由来:

今天客户需要我向机器端发送命令,然后需要加密一个字段,用的就是DES算法ECB模式NoPadding填充。因为之前没有接触过,所以在网上找了很多,最后调试,优化了一个。

HibernateTemplate.save()报错 org.hibernate.exception.SQLGrammarException

1.问题由来

写着写着在用

this.getHibernateTemplate().save(l);

的时候报错了,而且是说sql语法错误,这就有点让人摸不着头脑了,这又没有写sql怎么可能会有sql语句错误,而且以前这么写的时候好像也没啥问题啊。

2.解决方案:

在另外一个博客上,看到有另一个博主也遇到了这个问题

然后我马上检查了一下数据表,果然发现有一个字段名为order,大有嫌疑!
然后把这个字段改了之后,果然错误消失。

java double类型加减运算时出现的精度丢失问题

问题由来:

今天在写一个业务参数的时候,需要几个数一起算一下最后返回一个浮点数。
一开始我就直接用强制类型转化之后开始加加减减,后来发现总是会在末尾多出一些莫名的小数,这很明显就是精度丢失问题,但是因为是要返回固定的数据类型,不能用Format转成String来固定格式。

解决方案

最正确的做法应该是使用BigDecimal 来转一下类型,这样才是Effective Java 中的推荐方法,但是我有点偷懒,就直接把公式变形了一下,先做加减法(几个int数据)再做除法,这样也不再有精度丢失。

Netty报java.net.BindException: Address already in use: bind

1.错误提示:

java.net.BindException: Address already in use: bind
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:128)
at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:554)
at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1266)
at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:501)
at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:486)
at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:988)
at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:250)
at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:365)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
at java.lang.Thread.run(Thread.java:745)

swagger带token或者cookie怎么过验证

问题由来:

最近愈发感觉写接口文档太麻烦了,就研究了一下swagger,springboot用起来确实不要太方便,什么多余的操作都不需要有就可以把链接甩给前端了。
但是通常我们的系统都是带有身份认证的,无非几种方式,cookie,session,token,前两种可以算为一类,这个倒是比较好解决,下个chrome插件,可以很轻松的把一个页面下的cookie复制到我们的swagger-ui界面下来,但是要注意修改域。
比如 EditThisCookie 插件。

但是token怎么办呢?必须要在每一个请求的header都加上token。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×