Java 与杰克逊反序列化有困难
我现在正在做一个项目,在反序列化一些对象时遇到了一些问题。我正在实现客户机-服务器通信,我必须在进程之间传递一些JSON。我正在向班级发送一份任命名单 我的班级被任命为,如下所示: 包project.serverSide.server.bussinessJava 与杰克逊反序列化有困难,java,json,serialization,jackson,Java,Json,Serialization,Jackson,我现在正在做一个项目,在反序列化一些对象时遇到了一些问题。我正在实现客户机-服务器通信,我必须在进程之间传递一些JSON。我正在向班级发送一份任命名单 我的班级被任命为,如下所示: 包project.serverSide.server.bussiness import java.sql.Date; import java.time.LocalDate; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxm
import java.sql.Date;
import java.time.LocalDate;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
public class AppointmentDto {
StringProperty DoctorName;
StringProperty PatientName;
ObjectProperty<Date> dateIssued;
public StringProperty getDoctorName() {
return DoctorName;
}
public void setDoctorName(StringProperty doctorName) {
DoctorName = doctorName;
}
public StringProperty getPatientName() {
return PatientName;
}
public void setPatientName(StringProperty patientName) {
PatientName = patientName;
}
public ObjectProperty<Date> getDateIssued() {
return dateIssued;
}
public void setDateIssued(SimpleObjectProperty<Date> simpleObjectProperty) {
this.dateIssued = simpleObjectProperty;
}
@JsonCreator
public AppointmentDto(@JsonProperty("doctor") String doctorName,@JsonProperty("patient") String patientName,@JsonProperty("dateIssued") Date dateIssued) {
super();
DoctorName = new SimpleStringProperty(doctorName);
PatientName = new SimpleStringProperty(patientName);
this.dateIssued = new SimpleObjectProperty<Date>(dateIssued);
}
public AppointmentDto() {
super();
}
}
堆栈跟踪是:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.sql.Date out of START_OBJECT token
at [Source: [{"dateIssued":{"value":null,"bean":null,"name":"","bound":false},"patientName":{"value":"Pop Ioan","bean":null,"name":"","bound":false,"valueSafe":"Pop Ioan"},"doctorName":{"value":"Mihai Georgescu","bean":null,"name":"","bound":false,"valueSafe":"Mihai Georgescu"}},{"dateIssued":{"value":null,"bean":null,"name":"","bound":false},"patientName":{"value":"Popescu Mioara","bean":null,"name":"","bound":false,"valueSafe":"Popescu Mioara"},"doctorName":{"value":"Mihai Georgescu","bean":null,"name":"","bound":false,"valueSafe":"Mihai Georgescu"}}]; line: 1, column: 16] (through reference chain: java.util.ArrayList[0]->project.serverSide.server.bussiness.AppointmentDto["dateIssued"])
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270)
at com.fasterxml.jackson.databind.DeserializationContext.reportMappingException(DeserializationContext.java:1234)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1122)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1075)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseDate(StdDeserializer.java:800)
at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateBasedDeserializer._parseDate(DateDeserializers.java:172)
at com.fasterxml.jackson.databind.deser.std.DateDeserializers$SqlDateDeserializer.deserialize(DateDeserializers.java:282)
at com.fasterxml.jackson.databind.deser.std.DateDeserializers$SqlDateDeserializer.deserialize(DateDeserializers.java:267)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:504)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:511)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:400)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1191)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:314)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:148)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:287)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:259)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3798)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2861)
at project.eHealth.ApplicationClient.run(ApplicationClient.java:76)
at java.lang.Thread.run(Thread.java:745)
感谢您的任何帮助 尝试使用java.util.Date而不是java.sql.Date?哪一行是76?@Minh Kieu当我试图反序列化服务器编写的JSON(AppointmentDto的ArrayList)时,会抛出异常。我也尝试过java.util.Date,没有改进。哪一行是ApplicationClient.java:76?由于有2个readValue()…我需要查看异常抛出的位置。@MinhKieu
ArrayList appointmentsList=mapper.readValue(resp.getData(),new TypeReference(){})代码>确定,以便映射程序能够反序列化“行”?…尝试调试“resp.getData()”…可能getData()没有返回正确的字符串。
package project.serverSide.server;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Response {
private String action;
private String data;
public Response() {
super();
}
@JsonCreator
public Response(@JsonProperty("action") String action,@JsonProperty("data") String data) {
super();
this.action = action;
this.data = data;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.sql.Date out of START_OBJECT token
at [Source: [{"dateIssued":{"value":null,"bean":null,"name":"","bound":false},"patientName":{"value":"Pop Ioan","bean":null,"name":"","bound":false,"valueSafe":"Pop Ioan"},"doctorName":{"value":"Mihai Georgescu","bean":null,"name":"","bound":false,"valueSafe":"Mihai Georgescu"}},{"dateIssued":{"value":null,"bean":null,"name":"","bound":false},"patientName":{"value":"Popescu Mioara","bean":null,"name":"","bound":false,"valueSafe":"Popescu Mioara"},"doctorName":{"value":"Mihai Georgescu","bean":null,"name":"","bound":false,"valueSafe":"Mihai Georgescu"}}]; line: 1, column: 16] (through reference chain: java.util.ArrayList[0]->project.serverSide.server.bussiness.AppointmentDto["dateIssued"])
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270)
at com.fasterxml.jackson.databind.DeserializationContext.reportMappingException(DeserializationContext.java:1234)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1122)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1075)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseDate(StdDeserializer.java:800)
at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateBasedDeserializer._parseDate(DateDeserializers.java:172)
at com.fasterxml.jackson.databind.deser.std.DateDeserializers$SqlDateDeserializer.deserialize(DateDeserializers.java:282)
at com.fasterxml.jackson.databind.deser.std.DateDeserializers$SqlDateDeserializer.deserialize(DateDeserializers.java:267)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:504)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:511)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:400)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1191)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:314)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:148)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:287)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:259)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3798)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2861)
at project.eHealth.ApplicationClient.run(ApplicationClient.java:76)
at java.lang.Thread.run(Thread.java:745)