【问题标题】:Jersey Jackson Serializing Parent FieldsJersey Jackson 序列化父字段
【发布时间】:2012-08-31 22:55:36
【问题描述】:

当对象“A”被序列化时,我有一个对象“A”扩展对象“B”,对象“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% 确定在序列化之前对象中存在错误消息部分。

另外值得一提的是,我使用的是 Jackson 1.9.2 和 Jersey 1.13

【问题讨论】:

    标签: java json serialization jersey jackson


    【解决方案1】:

    如果您期望包含“错误”,问题是isError() 中的@JsonIgnore,没有任何其他注释。因此,在getError() 旁边添加@JsonProperty,它应该被包括在内。您可能还需要将其添加到setError()

    这里的问题是 Jackson 认为 @JsonIgnore 在这里的意思是“忽略属性'错误'”,而您可能只是希望忽略那个特定的访问器。

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 2012-05-01
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      相关资源
      最近更新 更多