使用spring、jackson格式化LocalDateTime

使用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

在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 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