我有Java
类,该类具有String
个可变成员
String sampleNumber="1234";
当我使用Pojo
将JSON
转换为ObjectMapper
时,我得到:
{
"sampleNumber":"1234"
}
但是我需要在JSON
中使用以下整数类型
{
"sampleNumber":1234
}
有人可以帮助我使用ObjectMapper
获得预期的结果吗?
答案 0 :(得分:1)
int
您可以将属性更改为int
:
class Pojo {
private int sampleNumber = 1234;
// getters, setters
}
您将获得:
{
"sampleNumber" : 1234
}
如果您不想将属性类型更改为int
/ Integer
,则需要忽略返回getter
的{{1}}并添加新的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