使用spring、jackson格式化LocalDateTime
在SpringREST应用程序中,我发送一个包含日期的objet {任命ID:,任命类型ID:“1”,任命日期: “2015-12-08T08:00:00-05:00” 在我的dto方面 关于我的任命日期,我有使用spring、jackson格式化LocalDateTime,spring,jackson,momentjs,spring-restcontroller,Spring,Jackson,Momentjs,Spring Restcontroller,在SpringREST应用程序中,我发送一个包含日期的objet {任命ID:,任命类型ID:“1”,任命日期: “2015-12-08T08:00:00-05:00” 在我的dto方面 关于我的任命日期,我有 @DateTimeFormat(iso=DateTimeFormat.ISO.DATE_TIME) @JsonDeserialize(using = LocalDateTimeDeserializer.class) private LocalDateTime appointmentDat
@DateTimeFormat(iso=DateTimeFormat.ISO.DATE_TIME)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime appointmentDate;
在我的相依关系中,我有
jackson-datatype-jsr310-2.6.3
我得到这个错误
rg.springframework.http.converter.httpMessageNodeTableException:
无法读取文档:无法读取文本“2015-12-08T13:00:00.000Z”
在索引23处找到已解析、未解析的文本(通过引用链:
server.dto.AppointmentDto[“appointmentDate”];嵌套异常是
com.fasterxml.jackson.databind.JsonMappingException:Text
无法分析“2015-12-08T13:00:00.000Z”,在找到未分析的文本
索引23(通过参考链:
server.dto.AppointmentDto[“appointmentDate”])
仅尝试使用DateTimeFormat、JsonDeserialize和两者,但得到相同的错误
编辑
@RequestMapping(value=“/rest”)
@RestController
公共类寄宿管理员{
@RequestMapping(value=“/lodgers/{lodgerId}/appoints”,method=RequestMethod.POST)
public Long createAppointsbylodgerid(@PathVariable(“lodgerId”)Long lodgerId,@RequestBody appointdto AppointmentDto){
返回AppointService.save(appointmentDto);
}
}
公共类任命{
私人长期任命ID;
私人长期任命类型ID;
私人长房客;
@JsonDeserialize(使用=LocalDateTimeDeserializer.class)
私有LocalDateTime任命日期;
公共任命{
}
}
日期
var locale=navigator.languages?navigator.languages[0]:(navigator.language | | navigator.userLanguage);
矩().locale(locale);
$(“#任命日期选择器”).datetimepicker({
格式:“DD/MM/YYYY H:MM”,
AllownPuttoggle:真
});
var lodgerId=$('#lodgerId').val();
var type=“post”;
变量url=”http://localhost:8080/rest/lodgers/“+lodgerId+”/预约”;
var data=transForm.serialize('#lodgerappointform');
data.appointmentDate=$(“#appointmentDatepicker”).data('DateTimePicker').date().format();
data.lodgerId=lodgerId;
data=JSON.stringify(数据);
jQuery.ajax({
类型:类型,
url:url,
contentType:“应用程序/json”,
数据:数据,
成功:功能(数据、状态、jqXHR){
},
错误:函数(jqXHR,状态){
}
});
transform.js来自
引导日期时间选择器来自
力矩使用2015-12-09T08:00:00-05:00(ISO 8601)
DateTimeFormatter.ISO_LOCAL_DATE_TIME谁是:2015-12-09T08:00:00(ISO 8601)
两者似乎使用的格式不同我认为您的问题如下所述: 我在使用LocalDateTime和RESTAPI时遇到了相同的错误。问题是您可以将LocalDateTime序列化为以下内容:
2015-12-27T16:59:29.959
您可以从该字符串在JavaScript中创建有效的日期对象
另一方面,如果您尝试向服务器发布/放置JavaScript日期,则:
var myDate = new Date();
JSON.stringify(myDate);
将创建如下字符串(带有额外的Z-表示祖鲁时间/UTC时区):
在反序列化过程中,额外的时区信息会在您的案例中导致错误,因为LocalDateTime没有时区
您可以尝试在服务器上使用ZonedDateTime,或在发送之前在客户端使用自己的日期字符串格式(不带Z后缀)。也许可以提供更多代码?这样我就可以在我的本地机器上复制它了?我把所有的代码都放进去了
var myDate = new Date();
JSON.stringify(myDate);
2015-12-27T16:59:29.959Z