这是我的用户类,我要在我的数据库中保存符合ISO的日期时间。
public class User {
@Id
private String id;
private String email;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime loginDate;
}
这是我的球衣控制器:
@POST
@Consumes("application/json")
@Produces("application/json")
public Response create( User user) {
Map<Object, Object> apiResponse = new HashMap<Object, Object>();
Map<Object, Object> response = new HashMap<Object, Object>();
user = (User) userService.create(user);
}
我如何使用像泽西岛这样的日期时间格式?是否可以发送一个datatime字符串
并自动创建Java8日期时间对象?
{
"email" : "imz.mrz@gmail.com"
"loginDate" : "2015-04-17T06:06:51.465Z"
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
假设您有JAXB注释支持,Jackson作为JSON提供者······
可以使用XMLAdapter
。例如
public class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime> {
@Override
public LocalDateTime unmarshal(String dateString) throws Exception {
Instant instant = Instant.parse(dateString);
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
return dateTime;
}
@Override
public String marshal(LocalDateTime dateTime) throws Exception {
Instant instant = dateTime.toInstant(ZoneOffset.UTC);
return DateTimeFormatter.ISO_INSTANT.format(instant);
}
}
有关详细信息,请参阅Instant API。
@XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
private LocalDateTime loginDate;
@XmlJavaTypeAdapters({
@XmlJavaTypeAdapter(type = LocalDateTime.class,
value = LocalDateTimeAdapter.class)
})
package thepackage.of.the.models;
import java.time.LocalDateTime;
import javax.xml.bind.annotation.html" target="_blank">adapters.XmlJavaTypeAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
@Override
public LocalDateTime deserialize(JsonParser jp,
DeserializationContext dc) throws IOException, JsonProcessingException {
ObjectCodec codec = jp.getCodec();
TextNode node = (TextNode)codec.readTree(jp);
String dateString = node.textValue();
Instant instant = Instant.parse(dateString);
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
return dateTime;
}
}
public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
@Override
public void serialize(LocalDateTime dateTime, JsonGenerator jg,
SerializerProvider sp) throws IOException, JsonProcessingException {
Instant instant = dateTime.toInstant(ZoneOffset.UTC);
jg.writeString(DateTimeFormatter.ISO_INSTANT.format(instant));
}
}
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
public LocalDateTime loginDate;
@Provider
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
final ObjectMapper mapper = new ObjectMapper();
public ObjectMapperContextResolver() {
SimpleModule module = new SimpleModule();
module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer());
mapper.registerModule(module);
// add JAXB annotation support if required
mapper.registerModule(new JaxbAnnotationModule());
}
@Override
public ObjectMapper getContext(Class<?> type) {
return mapper;
}
}
基本上,用于ummarshalling/marshalling的MessageBodyWriter
/MessageBodyReader
将调用getContext
方法来获取ObjectMapper
注:
>
以上解决方案将按照instant.parse
中所述的格式2007-12-03T10:15:30.00z
进行解析,并将序列化为datetimeformatter.iso_instant
中所述的相同格式
上面还假设您使用Jackson作为序列化程序。我使用下面的依赖项(与Jersey 2.16)进行测试
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.16</version>
</dependency>
依赖项使用JacksonJAXBJSONProvider
来支持JAXB注释。如果您使用的是Jersey的较低版本,比如1.x,那么jersey-json
依赖项应该提供JAXB注释支持,如果您启用了POJO映射特性的话。对于Jersey1.x,如果您想使用Jackson2,也可以使用这个依赖项
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.4.0</version>
</dependency>
这实际上是jersey-media-json-jackson
所使用的。因此,您可以显式注册JacksonJAXBJSONProvider
,或者添加Jackson包(com.fasterxml.Jackson.jaxrs.json
)以列出要扫描的包
我有一个文件,可以有日期修改值与日期或日期时间的格式。我曾将该值解析为: 现在,字符串也可以是
快速介绍(可以跳过):嗨,有很多关于这个主题的问题和答案,但是有时候解决方案很简单,你甚至都没想过,因为我已经浪费了很多时间,所以我想发布一个对所有答案的补充。 问题:您有一个JSON REST服务,它处理POST请求以保存JSON对象,但该对象包含Genson未开箱即用解析的Date字段。 Java对象: 球衣的其余服务: 使用jQuery的javascript客户端:
问题内容: 我有一个系统(用Python开发),它接受 datetime作为各种格式的字符串 ,我必须 解析 它们。当前datetime字符串格式是: 现在我想要一个可以在适当的datetime对象中转换任何这些datetime格式的 通用解析器… 否则,我必须单独分析它们。因此,还请提供单独解析它们的方法(如果没有通用解析器)。 问题答案: 正如@TimPietzcker所建议的那样,dateu
Java 8 添加了一个新的 java.time API 来处理日期和时间 (JSR 310)。 我有字符串形式的日期和时间(例如< code >“2014-04-08 12:30”)。如何从给定的字符串中获取< code>LocalDateTime实例? 在我完成对象的工作后:如何将实例转换回与上述格式相同的字符串?
我试图以C#为目标,使用Antlr4解析一个日期。在我的情况下,有效日期应具有以下内容 采用格式 年份只能有4位数字 月和日只能有2位 我知道类似的问题已经出现了,但它们的解决方案似乎对我不起作用 如何创建将解析日期的antlr4语法 ANTLR:识别日期和数字的最简单方法? 我在某个地方读到过,有一种类似优先级的解析,其中基于语法文件如何编写的顶级规则首先被评估。因此,考虑一下,除了日期,我的语
问题内容: 我正在尝试解析json请求中的Datetime。该请求看起来像这样: 它被解码成的结构看起来像这样: 解码行如下所示: Revel返回此错误: 根据此处的revel文档,https://revel.github.io/manual/parameters.html 在同一文档中,他们还说您可以附加如下格式: 为了验证格式是否在数组中,我尝试了以下方法: 在绝望的最后一幕中,我尝试以rev