1

オブジェクト「A」がシリアル化されたときにオブジェクト「B」を拡張するオブジェクト「A」があります。オブジェクト「B」のフィールドはJSONにシリアル化されません。何か案は?これが私の関係するオブジェクトです。

public class CreateNewPlayerAndLoginResponse extends EPNetResponse{
    private PlayerSession playerSession;

    public CreateNewPlayerAndLoginResponse() {
    }

    public CreateNewPlayerAndLoginResponse(Integer playerId, String playerSessionId) {
        this.playerSession = new PlayerSession(playerId, playerSessionId);
    }

    public CreateNewPlayerAndLoginResponse(EPNetErrorEnum error) {
        super(error);
    }

    public CreateNewPlayerAndLoginResponse(EPNetError error) {
        super(error);
    }

    public PlayerSession getPlayerSession() {
        return playerSession;
    }

    public void setPlayerSession(PlayerSession playerSession) {
        this.playerSession = playerSession;
    }

    @Override
    public String toString() {
        return "CreateNewPlayerAndLoginResponse{" + "playerSession=" + playerSession + '}';
    }

}

public class EPNetResponse implements Serializable{

    private EPNetError error;

    public EPNetResponse() {
    }

    public EPNetResponse(EPNetError error) {
        this.error = error;
    }

    public EPNetResponse(EPNetErrorEnum error){
        this.error = new EPNetError(error);
    }

    public EPNetError getError() {
        return error;
    }

    public void setError(EPNetError error) {
        this.error = error;
    }

    @JsonIgnore
    public boolean isError(){
        if(error == null){
            return false;
        }

        return true;
    }
}

public class EPNetError implements Serializable{
    private static final int UNEXPECTED_ERROR = 5417;
    private Integer code;
    private String message;

    public EPNetError() {
    }

    public EPNetError(EPNetErrorEnum error){
        this.code = error.getCode();
        this.message = error.getMessage();
    }

    public EPNetError(EPNetErrorEnum error, String message){
        this.code = error.getCode();
        this.message = message;
    }

    public EPNetError(String message){
        this.code = EPNetError.UNEXPECTED_ERROR;
        this.message = message;
    }

    public EPNetError(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

}

シリアル化された応答として取得するのは

{"playerSession":null}

シリアル化の前にオブジェクトのエラーメッセージ部分があると100%確信していますが。

また、私はジャクソン1.9.2とジャージー1.13を使用しています。

4

1 に答える 1

1

「エラー」が含まれることを期待している場合、問題は、@JsonIgnoreisError()の注釈がないことです。したがって、@JsonPropertynext を追加するgetError()と、含まれるはずです。に追加する必要がある場合もありますsetError()

ここでの問題は、ジャクソンが@JsonIgnoreここで「プロパティ「エラー」を無視する」ことを意味すると考えていることですが、おそらくその特定のアクセサーを無視したいだけです。

于 2012-09-07T20:33:31.297 に答える