Изменить свойство на int
Вы можете изменить свою собственность на int
:
class Pojo {
private int sampleNumber = 1234;
// getters, setters
}
, и вы получите:
{
"sampleNumber" : 1234
}
Добавить новоеметод получения с правильным типом
Если вы не хотите изменять тип свойства на int
/ Integer
, вам нужно игнорировать getter
, который возвращает String
, и добавить новый getter
, который вернет int
/ Integer
:
class Pojo {
private String sampleNumber = "1234";
public Integer getSampleNumber() {
return Integer.parseInt(sampleNumber);
}
@JsonIgnore
public String getSampleNumberString() {
return sampleNumber;
}
public void setSampleNumber(String sampleNumber) {
this.sampleNumber = sampleNumber;
}
}
Для выше POJO
вы получите ниже JSON
:
{
"sampleNumber" : 1234
}
Напишите пользовательский сериализатор, который принудительно int
Вы можете написать собственный сериализатор, который пытается проанализировать String
и записать его как Number
:
class ForceIntSerializer extends StdScalarSerializer<Object> {
public ForceIntSerializer() {
super(Object.class);
}
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {
if (value instanceof String) {
try {
gen.writeNumber(Integer.parseInt(value.toString()));
} catch (NumberFormatException e) {
gen.writeString(value.toString());
}
} else if (value instanceof Integer) {
gen.writeNumber(((Integer) value));
}
}
}
Вы можете использовать его, как показано ниже:
class Pojo {
private String sampleNumber = "1234";
@JsonSerialize(using = ForceIntSerializer.class)
public String getSampleNumber() {
return sampleNumber;
}
}
, и вы получитениже JSON
:
{
"sampleNumber" : 1234
}