公共方法上的Java序列化行为

时间:2016-08-30 22:44:04

标签: java json jackson

目前我在我的Web服务器上创建了一个对象,然后它将作为JSON对象返回给我的客户端。

public class JsonClass{

    @SerializedName("field1")
    private myObject field1;

    public myObject getField1() {
        return field1;
    }

    public void setField1(myObject value) {
        this.field1 = value;
    }

    @SerializedName("field2")
    private myObject field2;

    public myObject getField2() {
        return field2;
    }

    public void setField2(myObject value) {
        this.field2= value;
    }

    public final boolean isValid() throws InvalidObjectException {
        if (field1 != null) field1 .isValid();
        if (field2 != null) field2 .isValid();
        return true;
    }

    @Override
    public int hashCode() {
        int result = 1;
        result = 31 * result + (field1 == null ? 0 : field1 .hashCode());
        result = 31 * result + (field2  == null ? 0 : field2 .hashCode());
        return result;
    }
}

我希望JSON对象是

{
  "field1": {
    "a": "123",
    "b": "456",
    "c": 789
  },
  "field2": {
    "a": "123",
    "b": "456",
    "c": 789
  }
}

但是,因为我的.isValid()方法是公共的,所以响应中的JSON对象都有一个额外的属性“valid”:true。

{
  "field1": {
    "a": "123",
    "b": "456",
    "c": 789,
    "valid": true
  },
  "field2": {
    "a": "123",
    "b": "456",
    "c": 789,
    "valid": true
  },
"valid": true
}

我无法将方法修饰符更改为private或protected,因为其他包中的类需要调用验证方法。

如何从我的JSON对象中消除额外字段“valid”:true?

编辑:我正在使用Spring Framework进行请求处理和响应处理。它在幕后使用杰克逊。

0 个答案:

没有答案