【问题标题】:Json Property takes any data type value as a String valueJson 属性将任何数据类型值作为字符串值
【发布时间】:2018-07-06 09:49:31
【问题描述】:

我有一些字符串字段,当我通过 JSON 发送布尔值或整数值时,框架将其作为字符串。

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 } 因此,名称将是“真实的”,而不是真实的。 问题是,我不希望它接受除 String 之外的任何其他数据类型(因此,如果我发送 Boolean 或 Integer 值,我希望它给出错误)。

【问题讨论】:

  • 默认情况下,所有 JSON 值都被视为字符串。这是您的代码,否则会对其进行转换。话虽如此,您可能很难按照预期的方式丢弃数据,因为这非常耗时且极难发现误报。

标签: java json hibernate spring-mvc


【解决方案1】:

似乎没有一些配置参数可以禁用这种自动转换。您可以编写自己的反序列化器。在 Jackson 存储库中检查 this issue

【讨论】:

  • 非常感谢您的回复!我使用你给我链接的例子解决了这个问题。
【解决方案2】:

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

    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) 引用了它

【讨论】:

    猜你喜欢
    • 2018-05-20
    • 2022-01-27
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    相关资源
    最近更新 更多