Java 与杰克逊反序列化有困难

Java 与杰克逊反序列化有困难,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

我现在正在做一个项目,在反序列化一些对象时遇到了一些问题。我正在实现客户机-服务器通信,我必须在进程之间传递一些JSON。我正在向班级发送一份任命名单

我的班级被任命为
,如下所示: 包project.serverSide.server.bussiness

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)