Tenho a seguinte classe Jackson:
public class InspectArrayFormulaArgs {
private final int expectedColumns;
@JsonCreator
public InspectArrayFormulaArgs(@JsonProperty(value = "expectedColumns", defaultValue = "-1") int expectedColumns) {
this.expectedColumns = expectedColumns;
}
}
Eu esperaria que Jackson verificasse se o Json analisado contém o campo expectedColumns
e:
- Se o campo estiver lá, aceite-o como está
- Caso contrário, use o
defaultValue
que declarei
Entretanto, o valor analisado por Jackson ainda é 0
quando este pojo é analisado.
Pensei que isso poderia ser devido ao fato de que o JDK inicializa um int
como 0 e Jackson não entende que o campo não está no Json (embora eu achasse que eles estavam analisando o Json diretamente).
Então, tentei usar Integer
instead of int
como um parâmetro para o construtor, mas isso acaba em a NullPointerException
porque Jackson não atribui o valor -1
e então o JDK tenta um unboxing de null
no campo int expectedColumns
.
Alguma ideia de como devo fazer isso?
Notas:
- Eu tentei anotar a classe com
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
mas não mudou nada - Eu presumo que posso declarar o campo como sendo um
Integer
em vez deint
, mas Jackson ainda o deixa comonull
(não atribui-1
) e eu queria evitar fazer verificações do meu lado, comovalue != null ? value : -1
. Claro que farei isso se não houver solução, mas acho estranho que Jackson seja incapaz de entender o que estou perguntando, então estou me perguntando se estou perguntando da maneira errada