您的位置:首页 > 编程语言 > Java开发

让jackson支持jdk8的日期类型LocalDate

2017-04-23 00:00 316 查看
jackson-databind包默认不支持jdk8新的日期类型LocalDate。该问题处理方式如下:

添加maven依赖包

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.8.8</version>
</dependency>


代码例子

package com.fasterxml.jackson;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
import org.junit.Assert;
import org.junit.Test;

import java.io.IOException;
import java.time.LocalDate;

public class JacksonTest {

@Test
public void test() throws IOException {

ClassA a = new ClassA();
a.setName("name1");
a.setLocalDate(LocalDate.now());

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new ParameterNamesModule())
.registerModule(new Jdk8Module())
.registerModule(new JavaTimeModule());

String json = mapper.writeValueAsString(a);
System.out.println(json);

ClassA a2 = mapper.readValue(json, ClassA.class);
Assert.assertEquals(a.getName(), a2.getName());
Assert.assertEquals(a.getLocalDate(), a2.getLocalDate());

}

static class ClassA {

private String name;

@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate localDate;

public LocalDate getLocalDate() {
return localDate;
}

public void setLocalDate(LocalDate localDate) {
this.localDate = localDate;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

}


参考

https://github.com/FasterXML/jackson-modules-java8

http://stackoverflow.com/questions/31896650/serialization-of-java-8-zoneddatetime-with-jackson-and-javatimemodule

http://stackoverflow.com/questions/27952472/serialize-deserialize-java-8-java-time-with-jackson-json-mapper
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐