我正在使用Jaxrs,使用springboot 1.5.x创建Rest服务。我有一个带有Instant属性的bean。当我打电话给我的服务而不是
{
"startTime": {
"epochSecond": 1517243670,
"nano": 986000000
}
}
我想获得一个iso格式的日期,即{"startTime":"2018-01-29T17:51:05"}
public class MyController{
@GET
@Path("/")
public MyBean test();
return new MyBean(Instant.now());
}
public class MyBean{
private Instant startTime;
}
我添加了java-8-time依赖项
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.9.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
<version>2.8.7</version>
</dependency>
尝试了几种方法,但都没有效果。
@JsonFormat
注释属性
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss")
private Instant startTime;
ObjectMapper
@Bean
@Primary
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.build();
objectMapper.registerModule();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,
false);
return objectMapper;
}
使用@Provider
public class ObjectMapperContextResolver implements
ContextResolver<ObjectMapper>{
private final ObjectMapper MAPPER;
public ObjectMapperContextResolver() {
MAPPER = new ObjectMapper();
SimpleModule module = new SimpleModule();
MAPPER.registerModule(new JSR310Module());
MAPPER.registerModule(new JavaTimeModule());
module.addSerializer(Instant.class, new DateSerializer());
module.addDeserializer(Instant.class, new DateDeserializer());
MAPPER.registerModule(module);
MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
}
@Override
public ObjectMapper getContext(Class<?> type) {
return MAPPER;
}
使用自定义序列化/去除化
@JsonDeserialize(using=DateDeserializer.class)
@JsonSerialize(using=DateSerializer.class)
private Instant startTime;
public class DateDeserializer extends JsonDeserializer<Instant>{
@Override
public Instant deserialize(JsonParser jp, DeserializationContext arg1)
throws IOException, JsonProcessingException {
return Instant.parse(jp.readValueAs(String.class));
}
}
public class DateSerializer extends JsonSerializer<Instant> {
@Override
public void serialize(Instant value, JsonGenerator gen,
SerializerProvider sp) throws IOException {...}
我在这里显然遗漏了一些东西。