简体   繁体   English

泽西·杰克逊序列化父字段

[英]Jersey Jackson Serializing Parent Fields

I have an object "A" which extends object "B" when object "A" gets serialized the fields from object "B" do not get serialized into JSON. 我有一个对象“ A”,当对象“ A”被序列化时,该对象扩展了对象“ B”,而对象“ B”的字段未序列化为JSON。 Any Ideas? 有任何想法吗? Here are my objects involved. 这是我涉及的对象。

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;
    }

}

All I get as the serialized response is 我得到的序列化响应是

{"playerSession":null}

Even though I am 100% sure there is an error message part of the object before serialization. 即使我100%确信序列化之前对象中有错误消息部分。

Also worth mentioning I am using Jackson 1.9.2 and Jersey 1.13 还值得一提的是,我正在使用Jackson 1.9.2和Jersey 1.13

If you are expecting 'error' to be included, problem is that @JsonIgnore in isError() , without any other annotations. 如果你期待“错误”被收录,问题是, @JsonIgnoreisError()没有任何其他的注解。 So, add @JsonProperty next to getError() and it should be included. 因此,在getError()旁边添加@JsonProperty ,它应该包括在内。 You may also need to add it to setError() . 您可能还需要将其添加到setError()

The problem here is that Jackson consider @JsonIgnore here to mean "ignore property 'error'", whereas you are probably only hoping to ignore that particular accessor. 这里的问题是,杰克逊认为@JsonIgnore在这里表示“忽略属性'错误'”,而您可能只是希望忽略该特定访问器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM