如何在使用 ObjectMapper 转换为 Json 时将 POJO 的字符串变量转换为整数?
How to convert String variable of POJO as Integer while converting to Json using ObjectMapper?
我有 Java
class 其中有 String
变量成员
String sampleNumber="1234";
当我使用 ObjectMapper
将 Pojo
转换为 JSON
时,我得到:
{
"sampleNumber":"1234"
}
但我需要 JSON
中的整数类型,如下所示
{
"sampleNumber":1234
}
任何人都可以帮助我使用 ObjectMapper
获得预期的结果吗?
将属性更改为int
您可以将 属性 更改为 int
:
class Pojo {
private int sampleNumber = 1234;
// getters, setters
}
你会得到:
{
"sampleNumber" : 1234
}
添加正确类型的新 getter
如果您不想将 属性 类型更改为 int
/Integer
您需要忽略 getter
其中 returns String
并添加新的 getter
这将 return 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
}
我有 Java
class 其中有 String
变量成员
String sampleNumber="1234";
当我使用 ObjectMapper
将 Pojo
转换为 JSON
时,我得到:
{
"sampleNumber":"1234"
}
但我需要 JSON
中的整数类型,如下所示
{
"sampleNumber":1234
}
任何人都可以帮助我使用 ObjectMapper
获得预期的结果吗?
将属性更改为int
您可以将 属性 更改为 int
:
class Pojo {
private int sampleNumber = 1234;
// getters, setters
}
你会得到:
{
"sampleNumber" : 1234
}
添加正确类型的新 getter
如果您不想将 属性 类型更改为 int
/Integer
您需要忽略 getter
其中 returns String
并添加新的 getter
这将 return 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
}