分类 Java 下的文章

jodatime spring mvc (spring boot) 配置 解决时区问题

jodatime依靠其方便的api和与Data无缝转换,成为java开发负责时间逻辑的不二之选。
当jodatime作为Entity的属性自动转换时,一般用到jadira.usertype

在实体类中使用jodatime需要引入jadira.usertype
自动转换有两种配置,一种是在属性上加注解:

// Will be mapped as DATETIME (on MySQL)

@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime createTime;

// Will be mapped as DATE (on MySQL), i.e. only date without timestamp
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDate")
private LocalDate birthdayDate;

一种是做全局配置
spring boot的app.properties配置如下:

spring.jpa.properties.jadira.usertype.autoRegisterUserTypes = true

这样在实体类中就可以直接使用jodatime的DateTime类型,在存取数据库的时候会自动完成类型转换

// Will be mapped as DATETIME (on MySQL)
private DateTime createTime;

// Will be mapped as DATE (on MySQL), i.e. only date without timestamp
private LocalDate birthdayDate;

不过有一个问题,当数据库保存实体时,时间少了8个小时,2016-06-20 00:00:00存到数据库中变成了2016-06-19 16:00:00,看来是丢了时区信息。

Apache HttpComponents(HTTPClient) Fluent API 使用

Jakarta Commons HTTPClient 3.X版本自11年之后就不再更新了,现在4.0以后的版本叫做HttpComponents

可以到这里下载 http://hc.apache.org/downloads.cgi

令人惊喜的是 HttpClient 4.2提供了连贯操作(Fluent API)。抛弃原来3.X版本的GetMethod、PostMethod,使得Http访问变得非常容易。

Get Request

Request.Get("http://somehost/")
        .execute().returnContent().asString();

简单一句话就可以页面内容获取到了。

如果Get有参数,可以使用URIBuilder来进行设置

URIBuilder builder = new URIBuilder();
builder.setScheme(ServerInfo.PROTOCAL).setHost(ServerInfo.HOST).setPath(path)
    .setParameter("para1", para1)
    .setParameter("para2", para2)
    .setParameter("para3", para3);

然后再进行Get