我有一些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值,我希望它给出错误)。
答案 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)