@JsonFormat(shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
"creationDate": "2019-04-10T14:49:05.672+0000"
"creationDate": {
"dayOfYear": 123,
"dayOfWeek": "FRIDAY",
"month": "MAY",
"dayOfMonth": 3,
"year": 2019,
"monthValue": 5,
"hour": 11,
"minute": 54,
"second": 12,
"nano": 238000000,
"chronology": {
"id": "ISO",
"calendarType": "iso8601"
}
},
public class CustomEntityMapper implements EntityMapper {
private final ObjectMapper objectMapper;
public CustomEntityMapper(ObjectMapper objectMapper) {
this.objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
objectMapper.registerModule(new CustomGeoModule());
objectMapper.registerModule(new JavaTimeModule());
}
@Override
public String mapToString(Object object) throws IOException {
return objectMapper.writeValueAsString(object);
}
@Override
public <T> T mapToObject(String source, Class<T> clazz) throws IOException {
return objectMapper.readValue(source, clazz);
}
}
将以下内容添加到对象映射器:
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
任何帮助或指点我的错误将是感激的。
设法使它与Spring Boot2.1.4和Spring Data Jest一起工作。以下是我所做的:
>
示例域对象:
@Document(indexName = "datetest")
public class DateTest {
@Id
private String id;
@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'HH:mm:ss.SSSZZ", timezone = "UTC")
private Instant instant = Instant.now();
@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
private ZonedDateTime zonedDateTime = ZonedDateTime.now();
@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'HH:mm:ss.SSS")
private LocalDateTime localDateTime = LocalDateTime.now();
// getters/setters
}
ElasticSearch/JEST配置:
@Configuration
public class ESConfig {
@Bean
public EntityMapper getEntityMapper() {
return new CustomEntityMapper();
}
@Bean
@Primary
public ElasticsearchOperations elasticsearchTemplate(final JestClient jestClient,
final ElasticsearchConverter elasticsearchConverter,
final SimpleElasticsearchMappingContext simpleElasticsearchMappingContext, EntityMapper mapper) {
return new JestElasticsearchTemplate(jestClient, elasticsearchConverter,
new DefaultJestResultsMapper(simpleElasticsearchMappingContext, mapper));
}
public class CustomEntityMapper implements EntityMapper {
private final ObjectMapper objectMapper;
public CustomEntityMapper() {
objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
objectMapper.registerModule(new CustomGeoModule());
objectMapper.registerModule(new JavaTimeModule());
}
@Override
public String mapToString(Object object) throws IOException {
return objectMapper.writeValueAsString(object);
}
@Override
public <T> T mapToObject(String source, Class<T> clazz) throws IOException {
return objectMapper.readValue(source, clazz);
}
}
}
ElasticSearch中的结果:
问题内容: 我知道: 即时是用于计算的“技术”时间戳表示(纳秒)。 LocalDateTime是日期/时钟表示形式,包括人类的时区。 最后,对于大多数应用程序用例,IMO都可以视为两种类型。例如:当前我正在运行一个批处理作业,我需要根据日期计算下一次运行,并且我正在努力寻找这两种类型之间的优缺点(除了Instant和时区部分的纳秒级精度优势)的LocalDateTime)。 您可以列举一些应用示例
我知道: 即时是一种用于计算的“技术性”时间戳表示(纳秒)。 LocalDateTime是包含人类时区的日期/时钟表示形式。 最终,IMO两者都可以作为大多数应用程序用例的类型。例如:当前,我正在运行一个批处理作业,需要根据日期计算下一次运行,我正在努力寻找这两种类型之间的优劣(除了Instant的纳秒精度优势和LocalDateTime的时区部分)。
我在我的模型中使用LocalDateTime,在包括LocalDateTimeDeserializer之后,将bean字段转换为 包括 属性在SpringBoot的应用程序中。属性文件,应用程序最终能够反序列化JSON并正确显示如下内容:, 但是,当我进行测试时,它会忽略WRITE_DATES_AS_TIMESTAMPS标志,我猜它会为上面相同的字符串日期生成一个输出, 请注意,在测试资源文件夹中
问题内容: 我正在使用Java 8中的新java.time包。我有一个遗留数据库,可以将其转换为。 我想做的是添加一个基于另一个数据库标志的时间段。我可能要加上几天,几周,几个月或几年。我不想关心我要添加的内容,并且希望将来能够添加更多选项。 我的第一个想法是,但这给了我大于一天的价值。即时显然不支持大时间单位上的操作。好吧,随便吧。 因此,我得到了以下代码: 现在,这是我第一次使用新的time
我想把@AutoWired注释变成一个“方面”。我想在我的方面中注入一个存储库,但是当我试图调用autowired类的方法时,出现了NullPointException。 我已经尝试在aspect类上添加,但我出现了同样的错误。 如果我不使用aspect类,而是使用,我可以毫无问题地调用存储库。 一些文档谈到了spring的xml文件配置,但在spring boot,我没有这些文件。 这里是pom
在以下情况下,哪些可用的java 8时间API类最适合JPA实体映射: 按信息类型创建的合同 日期以UTC格式存储在数据库中 业务逻辑以UTC进行所有计算 日期显示在欧洲/维也纳时区的UI中 我看到的大多数示例都使用LocalDateTime,但其中一个没有任何时区的概念。既然我们的所有业务逻辑都应该在UTC中进行计算,并在UTC中检索/存储数据,那么Instant或ZonedDateTime不是