- 浏览: 32664 次
- 性别:
- 来自: 杭州
最新评论
-
转转beta:
这种方式有一个缺陷,就是如果类里有参数是List<Mod ...
XStream注解方式实现生成的XML带CDATA标签 -
zhangjjie:
内部类有问题,CDATA标签注解加了没用
XStream注解方式实现生成的XML带CDATA标签 -
weixinjie:
@cjm0000000 谢谢提供。不过程序当中有个bug,ne ...
XStream注解方式实现生成的XML带CDATA标签 -
cjm0000000:
jurnzhou 写道大哥,第二段代码是新建一个类吗?是新建一 ...
XStream注解方式实现生成的XML带CDATA标签 -
jurnzhou:
大哥,第二段代码是新建一个类吗?
XStream注解方式实现生成的XML带CDATA标签
文章列表
[置顶] MMT——微信易信接入
- 博客分类:
- JAVA
系统架构:主要基于Spring框架,包含IOC、MVC、Security等,数据持久化采用Mybatis 3,UI采用了Bootstrap 3+ Velocity模板。
功能介绍:1. 微信易信接入——智能消息回复;2. 消息库管理——多级消息回复;3. 自定义菜单管理——实时同步到微信、易信;4. 集成国内天气查询;5. 数据统计——包含订阅,退订,粉丝,消息等各种数据统计;
https://github.com/cjm0000000/mmt/releases
最近在实现微信公众接口的时候,用到了XStream来实现java Object和XML的相互转换,由于生成的XML需要用到CDATA标签,于是对XPPDriver做了一点扩展,用于支持自定义的注解。
第一步,需要创建自己的标签类XStreamCDATA,用于标记需要加入CDATA标签的field,代码如下:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface XStreamCDATA {
}
第二步,改写XPPDriver,通过Java反射的方式去查找 ...
最近总结了下ReentrantReadWriteLock的学习,写的比较生硬。
点击阅读
今天被问到Java字符串搜索,中午抽空研究了String的源码。
int indexOf(String str)
核心查找代码:
for (int i = sourceOffset + fromIndex; i <= max; i++) {
/* Look for first character. */
if (source[i] != first) {
...
2013年已经过去了,今天迎来了2014年的第一个工作日,天气很好,希望2014年一帆风顺。
2013年对我来说是重要的转折点,我在这一年里成长的很快(有自身的原因,也有外界的原因)。这一年,工作虽然不是很忙,但是研究 ...
今天在家里使用centos的时候发现中文乱码,网上各种解决方案都试过了,没有作用。同样的镜像我在单位运行中文是正常的,百思不得其解;
后来忽然灵光一闪,是不是SecureCRT这货引起的? 果断用PUTTY连上去,vi xxx,一切正常,果然是SecureCRT这货有问题,标记一下。
PS: 为什么我要用SecureCRT?
支持标签式窗口,我开7-8个VM,管理起来比较方便(结果反而折腾了)
Java乱码的问题,应该是最常见的。我最近一个项目中的一种场景是这样的:99%的数据不会出现乱码,1%的数据会出现乱码(这在Ajax调用时产生),原因是框架硬编码了字符集:iso-8859-1.
其实有很多方法解决掉这个乱码:1. 加个字符过滤器; 2. 修改框架的代码,支持UTF-8 等等.
为了1%的调用加个过滤器,我是无法忍受的。
修改框架代码,这个还是可以接受,不过感觉不是很高明。
思来想去,后来想到了Unicode(庆幸的是,这1%的数据是静态的)。
干脆用JDK自带的工具将中文转成Unicode:
E:\Java\jdk ...
前几天把Mybatis升级到3.2.2,发现动态SQL的SqlBuilder/SelectBuilder这几个类应经被弃用,取而代之的是一个叫AbstractSQL的抽象类,打开看源码(什么注释都没有。。。);翻了半天官方文档,发现他有个默认的实现SQL类,新的Mybatis可以通过SQL类来构造动态SQL,详情请见官方文档:
http://mybatis.github.io/mybatis-3/statement-builders.html
在参考他的文档的时候,遇到一个奇怪的问题(我参考的是下面这段):
// With conditionals (note the final ...
最近的项目采用Velocity 1.7作为模板引擎,几天用下来,感觉还是挺爽的。不过今天发现一个坑:macro里面如果有多行的话,输出的字符串前后都被加上了换行和空格。直接上代码:
#macro(getContextPath)
#set($root = $context.webApplicationContext.servletContext.contextPath)
#if($root.lastIndexOf('/') == 0)
#set($root = $root + '/')
#end
$root
#end
调用 ...
通过对Java Core的学习,对java exception有了新的认识,之前在处理异常的时候,会采用try...catch...finally这种形式:
public void connect2() {
Socket client = null;
PrintWriter out = null;
Scanner scanner = null;
try {
client = new Socket("173.39. ...
CyclicBarrier用于处理任务拆分,计算,等待计算全部完成,然后合并计算的场景,Future,CountDownLatch可以实现类似的场景。
package multithread.cycle;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
...
信号量(Semaphore)为程序并发运行提供了多个通道,在此标记一下。
package multithread.semaphore;
import java.security.SecureRandom;
import java.util.concurrent.Semaphore;
/**
* 模拟超市收银
*
* @author lemzhang
*
*/
public class CasherTest {
private final Semaphore available;
private final String[] cust ...
今天学习了一下Exchanger. 可以让一对线程交换数据,模拟了一个场景,标记一下,方便以后查看。
package multithread.exchanger;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Exchanger;
/**
* 兑换奖品
*
* @author lemzhang
*
*/
public class TestExchange ...
今天遇到一个BUG,给定数据"a,b,c,d,e“,用"a,b,c,d,e“.split(",")函数生成的数组长度是5。但是,如果给定的数组是“a,b,c,d,”,这种格式,情况就不一样了,我之前一直认为"a,b,c,d,“.split(",")的数组长度是5,但是事实上,长度是4。
参考代码片段:
String a = "a,b,c,d,";
String b = "a,b,c,d,e";
System.out.println(a.split(&q ...