我有一个带有 JSON
属性的 Boolean
对象,在反序列化期间只需要允许 true
或 false
。true
和 false
的任何不同值都应该抛出异常。
我怎样才能做到这一点?
例如。:
有效的 json:
{
"id":1,
"isValid":true
}
无效的 json:
{
"id":1,
"isValid":1
}
更新
我尝试了@Michał Ziober 的建议,效果很好。
当我正在实现一个 Spring 应用程序(使用 Webflux)时,我只需要以不同的方式进行配置。我在这里发布我所做的:
DelegatingWebFluxConfiguration
configureHttpMessageCodecs
方法,在 ObjectMapper
@Configuration
public class JacksonConfig extends DelegatingWebFluxConfiguration {
@Override
protected void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(MapperFeature.ALLOW_COERCION_OF_SCALARS);
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
configurer.defaultCodecs()
.jackson2JsonDecoder(new Jackson2JsonDecoder(objectMapper));
}
}
最佳答案
您需要禁用 ALLOW_COERCION_OF_SCALARS 功能:
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
mapper.disable(MapperFeature.ALLOW_COERCION_OF_SCALARS);
System.out.println(mapper.readValue(jsonFile, Pojo.class));
}
}
class Pojo {
private int id;
private Boolean isValid;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Boolean getIsValid() {
return isValid;
}
public void setIsValid(Boolean valid) {
isValid = valid;
}
@Override
public String toString() {
return "Pojo{" +
"id=" + id +
", isValid=" + isValid +
'}';
}
}
上面的代码打印:
关于java - Jackson:有没有办法忽略 boolean 反序列化的 0/1?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57778322/