Java Json属性将任何数据类型值作为字符串值

Java Json属性将任何数据类型值作为字符串值,java,json,hibernate,spring-mvc,Java,Json,Hibernate,Spring Mvc,我有一些字符串字段,当我通过JSON发送布尔值或整数值时,框架将其作为字符串 public class Author implements Serializable{ private static final long serialVersionUID= -319383931931231L; @JsonProperty("name") private String name; private String getName() { return name;} private

我有一些字符串字段,当我通过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} 所以,名字应该是“真的”,而不是真的。
问题是,我不希望它接受字符串以外的任何其他数据类型(因此,如果我发送一个布尔值或整数值,我希望它给出一个错误)。

看起来没有一些配置参数来禁用这种自动转换。您可以编写自己的反序列化程序。签入Jackson存储库

编写我自己的反序列化程序对我很有用

    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();
      }
}
公共类反序列化程序扩展JsonDeserializer{
@凌驾
公共字符串反序列化(JsonParser jp,反序列化上下文desCtx)
{if(jp.getCurrentToken()==JsonToken.VALUE\u NUMBER\u INT)
抛出desCtx.ErrorTokenException(jp,JsonToken.VALUE_字符串,“试图插入int”);
if(jp.getCurrentToken()==JsonToken.VALUE\u FALSE)
抛出desCtx.ErrorTokenException(jp,JsonToken.VALUE_字符串,“试图插入假值”);
if(jp.getCurrentToken()==JsonToken.VALUE\u TRUE)
抛出desCtx.ErrorTokenException(jp,JsonToken.VALUE_字符串,“试图插入真值”);
返回jp.getValueAsString();
}
}

然后,我在类中使用注释
@jsondeseligate(using=Deserializer.class)

引用它。默认情况下,所有JSON值都被视为字符串。这是您的代码,否则将对其进行转换。尽管如此,您可能很难按照预期的方式丢弃数据,因为这非常耗时,而且很难找到误报。非常感谢您的回复!我用你给我链接的例子解决了这个问题。