如何通过JSON注解实现POJO中String字段按需序列化为int类型?
实现String字段的动态JSON序列化
没有现成的JSON注解能直接实现这个需求,但可以通过自定义序列化器来搞定,以常用的Jackson库为例:
步骤1:自定义序列化器
写一个继承自JsonSerializer<String>的类,在序列化时判断字符串是否能转成int,能就输出数字,否则输出字符串:
import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; public class DynamicCodeSerializer extends JsonSerializer<String> { @Override public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException { if (value == null) { gen.writeNull(); return; } try { int intValue = Integer.parseInt(value); gen.writeNumber(intValue); } catch (NumberFormatException e) { gen.writeString(value); } } }
步骤2:给POJO字段加注解
在你的code字段上加上@JsonSerialize注解,指定用上面写的序列化器:
import com.fasterxml.jackson.databind.annotation.JsonSerialize; public class YourPOJO { @JsonSerialize(using = DynamicCodeSerializer.class) private String code; // 别忘了补充getter和setter方法 }
这样就能实现你要的效果:当code是纯数字字符串(比如"111")时,序列化后是数字类型;如果是字母或其他非纯数字字符串(比如"CD"),就保持字符串类型输出。
内容的提问来源于stack exchange,提问作者xMilos
相关产品推荐
相关产品推荐

