Json Property将任何数据类型值作为String值

时间:2018-07-06 09:49:32

标签: java json hibernate spring-mvc

我有一些String字段,当我通过JSON发送布尔值或Integer值时,框架会将其作为String。

public class Author implements Serializable{

 private static final long serialVersionUID= -319383931931231L;

 @JsonProperty("name")
 private String name;

 private String getName()
  { return name;}

 private void setName(String name)
 { this.name=name;}

}

JSON示例:{“ name”:true} 因此,名称将为“ true”,而不是true。 问题是,我不希望它接受除String之外的任何其他数据类型(因此,如果我发送布尔值或Integer值,我希望它给出错误)。

2 个答案:

答案 0 :(得分:0)

好像没有一些配置参数可以禁用这种自动转换。您可以编写自己的解串器。在Jackson库中检查this issue

答案 1 :(得分:0)

编写自己的反序列化器对我有用。

    public class Deserializer extends JsonDeserializer<String>{
      @Override
      public String deserialize(JsonParser jp, DeserializationContext desCtx)
      {  if(jp.getCurrentToken() == JsonToken.VALUE_NUMBER_INT)
           throw desCtx.wrongTokenException(jp, JsonToken.VALUE_STRING,"Attempted to insert int");
         if(jp.getCurrentToken() == JsonToken.VALUE_FALSE)
           throw desCtx.wrongTokenException(jp, JsonToken.VALUE_STRING,"Attempted to insert false value");
         if(jp.getCurrentToken() == JsonToken.VALUE_TRUE)
           throw desCtx.wrongTokenException(jp, JsonToken.VALUE_STRING,"Attempted to insert true value");
         return jp.getValueAsString();
      }
}

然后我在课堂上用注释@JsonDeserialize(using=Deserializer.class)