0
我有三個類:請求(抽象),RequestCreateContract,RequestUpdateContract。奇怪RequestUpdateContract未能反序列化。我試圖將RequestCreateContract代碼複製粘貼到RequestUpdateContract中,並且繼續失敗:只更改了類名和構造函數名稱。另一方面,RequestCreateContract沒有任何問題。傑克遜多態反序列化失敗:不同的類,相同的代碼
報道例外:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "contract" (class mypackage.net.protocol.request.RequestUpdateContract), not marked as ignorable (one known property: "login"])
這裏是代碼。 請求(超)
package mypackage.net.protocol.request;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import mypackage.net.protocol.Login;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
@JsonSubTypes({
@JsonSubTypes.Type(value = RequestUpdateContract.class, name = "RequestUpdateContract"),
@JsonSubTypes.Type(value = RequestCreateContract.class, name = "RequestCreateContract"),
@JsonSubTypes.Type(value = RequestDeleteContract.class, name = "RequestDeleteContract"),
@JsonSubTypes.Type(value = RequestFindContract.class, name = "RequestFindContract"),
@JsonSubTypes.Type(value = RequestGetContract.class, name = "RequestGetContract")
}
)
public abstract class Request {
protected Login login;
@JsonCreator
public Request(@JsonProperty("login") Login login){
this.login=login;
}
public Request(){
}
@JsonProperty("login")
public Login login(){
return login;
}
}
RequestCreateContract
package mypackage.net.protocol.request;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import mypackage.datamodel.contract.Contract;
import mypackage.datamodel.contract.dealinfo.DealInfo;
import mypackage.net.protocol.Login;
public class RequestCreateContract extends Request{
/*
DealInfo dealInfo;
@JsonCreator
public RequestCreateContract(
@JsonProperty("login") Login login,
@JsonProperty("dealinfo") DealInfo dealInfo){
super(login);
this.dealInfo=dealInfo;
}
@JsonProperty("dealinfo")
public DealInfo dealInfo(){
return dealInfo;
}
*/
Contract contract;
@JsonCreator
public RequestCreateContract(
@JsonProperty("contract") Contract contract,
@JsonProperty("login") Login login){
super(login);
this.contract=contract;
}
@JsonProperty("contract")
public Contract contract(){
return contract;
}
}
RequestUpdateContract
package mypackage.net.protocol.request;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import mypackage.datamodel.contract.Contract;
import mypackage.datamodel.contract.dealinfo.DealInfo;
import mypackage.net.protocol.Login;
public class RequestUpdateContract extends Request{
/*
DealInfo dealInfo;
@JsonCreator
public RequestCreateContract(
@JsonProperty("login") Login login,
@JsonProperty("dealinfo") DealInfo dealInfo){
super(login);
this.dealInfo=dealInfo;
}
@JsonProperty("dealinfo")
public DealInfo dealInfo(){
return dealInfo;
}
*/
Contract contract;
@JsonCreator
public RequestUpdateContract(
@JsonProperty("contract") Contract contract,
@JsonProperty("login") Login login){
super(login);
this.contract=contract;
}
@JsonProperty("contract")
public Contract contract(){
return contract;
}
}
我希望你能重現該問題。這些類是客戶端和服務器應用程序之間共享項目的一部分。