Étant donné que j'ai le fichier JSON suivant:
{
"cleanup": false,
"clearCache": false
}
et le bean suivant:
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;
}
}
Comment puis-je forcer Jackson 2.9.2 à utiliser mon setter concurrency
? Actuellement, lors de la désérialisation du JSON vers le bean en utilisant new ObjectMapper().readValue(inputStream, Config.class)
, concurrency
est défini sur null
.
Je pensais que Jackson utilisait les setters dans un bean, si fournis, pour définir une propriété. Après avoir vu le résultat désérialisé et débogué, j'ai découvert que ce n'était pas vrai. Puisque l'attribut defaultValue
de JsonProperty
est uniquement à des fins de documentation, je pensais que je pourrais ajouter le réglage de la valeur par défaut dans les setters, mais évidemment cela n'a pas fonctionné. Comment puis-je accomplir cela?