Java Json属性将任何数据类型值作为字符串值
我有一些字符串字段,当我通过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
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值都被视为字符串。这是您的代码,否则将对其进行转换。尽管如此,您可能很难按照预期的方式丢弃数据,因为这非常耗时,而且很难找到误报。非常感谢您的回复!我用你给我链接的例子解决了这个问题。