分类 其他 下的文章

这周前几天,同事问我,使用Fastjson进行Json的处理,需要转成Json的对象中还有null值,输出成JsonString后,该值和所对应的key都没有了。他的代码是这样的:

Map<String, String> map = new HashMap<String, String>();
map.put("a", "12");
map.put("b", null);
String jsonString = JSONObject.toJSONString(map);
System.out.println(jsonString);

输出为:

{"a":"12"}

b的key没了,value也没了,而对于使用该接口的下游系统来说,有key而value为null与无key是完全不同的概念,所以需要下发该key。

我搜了下,网上有提供方案,使用SerializerFeature.WriteMapNullValue。如下:

Map<String, String> map = new HashMap<String, String>();
map.put("a", "12");
map.put("b", null);
String jsonString = JSONObject.toJSONString(map,
        SerializerFeature.WriteMapNullValue);
System.out.println(jsonString);

输出为:

{"b":null,"a":"12"}

- 阅读剩余部分 -

上次在慕课网看了一个Java分页原理与实践(上)的视频,看了觉得没有什么难得。昨天晚上无聊就想写下分页,毕竟这两年工作,我没有自己写过分页功能,只是用写好的,这个功能还是很重要的。

当然分页不只是Java才会有这种功能,跟编程语言没有丝毫关系。只是前几天,我在oschina上看到一个mybatis的分页插件mybatis-paginator,就像拿来做下实验。

分页,pagination,这个功能的作用我认为主要有两点:

  1. 服务端和客户端之间,可以减少数据传输量,不用每次都将所有的数据下发到客户端,每次下发一页或者几页就可以了;
  2. 服务端内,数据库不用每次都将所有的数据查出来,每次查指定页的数据即可,减轻了数据库的压力。

- 阅读剩余部分 -

纵观各大语言及Web开发框架(先挖个坑),配置URL和Controller的方式有以下几种:

  1. XML配置
  2. 注解
  3. 代码

XML配置

来个Spring MVC的:

Go语言的Web框架Revel采用配置文件,但不是XML格式的,我觉得可以放在这里(代码来自Revel官方文档

# conf/routes
# This file defines all application routes (Higher priority routes first)
GET    /login                Application.Login       # A simple path
GET    /hotels/              Hotels.Index            # Matches with or without trailing slash
GET    /hotels/:id           Hotels.Show             # Extract an embedded argument
WS     /hotels/:id/feed      Hotels.Feed             # WebSockets.
POST   /hotels/:id/:action   Hotels.:action          # Automatically route some actions.
GET    /public/*filepath     Static.Serve("public")  # Assets served from /public/...
*      /:controller/:action  :controller.:action     # Catch all; Automatic URL generation

- 阅读剩余部分 -

在用Java开发的时候,往往会使用依赖注入框架,最常见的莫过于Spring或者Google Guice。

最常见的注入方式,一时XML配置文件(XML Configuration),二是注解(Annotation)。

然而,我非常抵触使用注解,只有不得不用的时候采用,比如@Override(当然Override也可以不写,当时我还是觉得写上可能更清晰些),或是其他一些消除警告的注解。

我不明白我抵触注解的原因是什么,我在写python的时候,经常使用装饰器(Decorator),类似于Java的注解,然而在写Java的时候,却不喜欢这样,这个也是令人困惑。

最近写代码的时候,我需要用依赖注入框架开管理我的Controller,Service,Dao,Model等对象。我使用了Spring,可是Spring太重了,我只是单单想使用它的DI功能,就需要好几个Jar包。如果你需要使用它来管理数据源的话,可能会引入更多的,如jdbc,tx,aop等。并且网上说这些组合起来非常方便,一套下来正好。我不喜欢这样。


2015-09-09更新
我最后还是放弃了XML配置的方式,也许只是目前放弃了XML配置的方式。
现在用Guice对项目进行了改造,原来用的是Spring,全部采用了注解的方式。

在UI中,经常会出现多次事件的情况,最常见的比如鼠标双击和三击,触摸屏上的双敲等。一次动作,就发一下事件就好。那么两次甚至多次事件怎么处理才最好呢?

当触发多次事件时,单次事件以及两次事件是否还要继续发送?

要什么方式判断两次事件间隔足以算上一个多次事件而不是多个单次时间呢?

代码是最好的老师。在Apache Pivot中找到了一段处理该事件的代码,伪代码如下:

long lastTime = 0;
int count = 0;

int multiInterval = 500;

// 亮屏
screenOn(){
    process();
}

// 灭屏
screenOff(){
    process();
}

// 处理
process(){
    long currentTime = System.currentTimeMills();
    if(current - lastTime &lt; multiInterval){
        count++;
    }else{
        lastTime = System.currentTimeMills();
        count = 1;
    }
    // 触发监听
    changeListeners.change(count);
}

从上述伪代码可以看出:

  • 每次事件都会发出,可能发出多个单次事件,也可能发出一个单次事件,一个两次事件……总之,每次UI操作均会发出事件
  • 判断两次事件是否算成一个组合事件,是通过判断事件触发间隔时间来做的