edg*_*e66 16 datetime iso8601 jodatime jackson spring-boot
我正在尝试使用Spring Boot v1.2.0将Joda DateTime属性序列化为ISO-8601 .BUILD-SNAPSHOT这是我非常简单的REST应用程序.
@RestController
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
class Info{
private DateTime dateTime;
public Info(){
dateTime = new DateTime();
}
public DateTime getDateTime() {
return dateTime;
}
public void setDateTime(DateTime dateTime) {
this.dateTime = dateTime;
}
}
@RequestMapping("/info")
Info info() {
return new Info();
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public Module getModule(){
return new JodaModule();
}
}
Run Code Online (Sandbox Code Playgroud)
dateTime被序列化为时间戳,例如{"dateTime":1415954873412}我试过添加
@Bean
@Primary
public ObjectMapper getObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,
false);
return objectMapper;
}
Run Code Online (Sandbox Code Playgroud)
但这也没有帮助.那么如何在Spring Boot中配置jackson以使用ISO-8601格式进行序列化?顺便说一句:我只在gradle构建中添加了以下依赖项
compile("joda-time:joda-time:2.4")
compile("org.jadira.usertype:usertype.jodatime:2.0.1")
compile("com.fasterxml.jackson.datatype:jackson-datatype-joda:2.4.2");
Run Code Online (Sandbox Code Playgroud)
Phi*_*ebb 20
由于您使用的是Spring Boot 1.2,因此您应该只需将以下内容添加到您的application.properties文件中:
spring.jackson.serialization.write_dates_as_timestamps=false
Run Code Online (Sandbox Code Playgroud)
这将以以下形式提供输出:
{
"dateTime": "2014-11-18T19:01:38.352Z"
}
Run Code Online (Sandbox Code Playgroud)
如果您需要自定义格式,可以JodaModule直接配置,例如删除时间部分:
@Bean
public JodaModule jacksonJodaModule() {
JodaModule module = new JodaModule();
DateTimeFormatterFactory formatterFactory = new DateTimeFormatterFactory();
formatterFactory.setIso(ISO.DATE);
module.addSerializer(DateTime.class, new DateTimeSerializer(
new JacksonJodaFormat(formatterFactory.createDateTimeFormatter()
.withZoneUTC())));
return module;
}
Run Code Online (Sandbox Code Playgroud)
使用Spring Boot 1.2,您可以使用流畅的构建器来构建ObjectMapper实例:
@Bean
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
return builder
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.build();
}
Run Code Online (Sandbox Code Playgroud)
至于JodaModule,它将com.fasterxml.jackson.datatype:jackson-datatype-joda在classpath上自动配置.
将 a 传递new JodaModule()给对象映射器的构造函数。
使用 ISO 模式注释您的 Info 方法
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
Run Code Online (Sandbox Code Playgroud)
或者我认为如果你使用 spring 你可以使用这个
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateTimeFormat.ISO.DATE_TIME)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20327 次 |
| 最近记录: |