Json Serialization接受布尔变量的数字输入

时间:2017-01-03 10:10:56

标签: java json spring boolean

我正在使用spring MVC开发REST API。 其中一项服务用于通过某个请求对象获取列车详细信息。 请求对象:

TrainRequest implements Serializable {
    private static final long serialVersionUID = 6280494678832642677L;
    private String travelMonth;
    private boolean departOnly; 
}

我已使用以下请求来测试服务。

{ 
"travelMonth": "DEC2016",
"departOnly":0
}

我已经看到0被序列化并且被分配给departOnly为false。我也测试了0以外的其他并且使得departOnly为真。 但我不希望有布尔变量的数字输入。 帮助我如何限制Spring验证或Java在定义的布尔变量中只有true / false。

1 个答案:

答案 0 :(得分:0)

TrainRequest implements Serializable {
    private static final long serialVersionUID = 6280494678832642677L;
    private String travelMonth;
    private int departOnlyInt;            // Serialized instead of departOnly
    private transient boolean departOnly;  // Not serialized

............................
 private void writeObject(ObjectOutputStream o)  throws IOException {
    departOnlyInt = departOnly ? 1 : 0;  
    o.defaultWriteObject();  
  }

  private void readObject(ObjectInputStream o) throws IOException,
          ClassNotFoundException {
    o.defaultReadObject();
    switch(departOnlyInt) {
         case 0: 
              departOnly = false; break; 

         case 1: 
              departOnly = true; break; 

         default: 
              throw new IOException ("Invalid boolean: " + departOnlyInt);  
    }
  }
..................

}