【发布时间】:2017-12-19 21:28:53
【问题描述】:
鉴于我有以下 JSON 文件:
{
"cleanup": false,
"clearCache": false
}
还有以下 bean:
import org.apache.commons.lang3.Validate;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Config implements IHoldConfiguration {
public static final boolean DEFAULT_CLEANUP = false;
public static final boolean DEFAULT_CLEAR_CACHE = false;
public static final int DEFAULT_CONCURRENCY = 1;
@JsonProperty(value = "cleanup", required = false, defaultValue = "false")
private Boolean cleanup;
@JsonProperty(value = "clearCache", required = false, defaultValue = "false")
private Boolean clearCache;
@JsonProperty(value = "concurrency", required = false, defaultValue = "1")
private Integer concurrency;
public boolean isCleanup() {
return this.cleanup.booleanValue();
}
public void setCleanup(final Boolean cleanup) {
this.cleanup = cleanup != null ? cleanup : DEFAULT_CLEANUP;
}
public boolean isClearCache() {
return this.clearCache.booleanValue();
}
public void setClearCache(final Boolean clearCache) {
this.clearCache = clearCache != null ? clearCache : DEFAULT_CLEAR_CACHE;
}
public int getConcurrency() {
return this.concurrency.intValue();
}
public void setConcurrency(Integer concurrency) {
if (concurrency == null) {
concurrency = DEFAULT_CONCURRENCY;
} else {
Validate.inclusiveBetween(1, Integer.MAX_VALUE, concurrency,
String.format("concurrency must be in range [1, %s]", Integer.MAX_VALUE));
}
this.concurrency = concurrency;
}
}
如何强制 Jackson 2.9.2 使用我的 concurrency setter?目前,当从 JSON 反序列化为 bean 时,使用 new ObjectMapper().readValue(inputStream, Config.class),concurrency 设置为 null。
我认为 Jackson 使用 bean 中的 setter(如果提供)来设置属性。在看到反序列化的结果和调试后,我发现这不是真的。由于JsonProperty 的defaultValue 属性仅用于文档,我想我可以在设置器中添加默认值设置,但显然这不起作用。我怎样才能做到这一点?
【问题讨论】: