不需要全局序列化器
,只是为了执行@JsonFormat(shape = Shape.NUMBER)
布尔字段的全局注释。
您只需覆盖适用于布尔字段的全局规则即可使用您的自定义之一Shape.NUMBER
这样您就不必在每个类的每个布尔字段中都执行此操作。
所以而不是有serialization/deserialization
在每个班级的每个领域
@JsonFormat(shape = Shape.NUMBER)
private Boolean success;
您可以在全局范围内使用以下代码来完成此操作:
@Bean
public ObjectMapper registerObjectMapper(){
ObjectMapper mapper = new ObjectMapper();
mapper.configOverride(Boolean.class)
.setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.NUMBER));
mapper.configOverride(boolean.class)
.setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.NUMBER));
return mapper;
}
如果有必要,如何应用全局序列化器
但是,如果您坚持注册全局序列化器,以便该格式仅用于序列化而不是反序列化,那么您可以这样做:
@Bean
public ObjectMapper registerObjectMapper(){
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("MyBooleanSerializer");
module.addSerializer(Boolean.class, new MyBooleanSerializer());
module.addSerializer(boolean.class, new MyBooleanSerializer());
mapper.registerModule(module);
return mapper;
}
And
public class MyBooleanSerializer extends JsonSerializer<Boolean> {
@Override
public void serialize(
Boolean value,
JsonGenerator gen,
SerializerProvider serializers) throws IOException {
gen.writeString(value ? "1" : "0");
}
}
有一个问题
仔细看看第二个解决方案
module.addSerializer(Boolean.class, new MyBooleanSerializer());
module.addSerializer(boolean.class, new MyBooleanSerializer());
在第一个解决方案中
.configOverride(Boolean.class)
.configOverride(boolean.class)
For Jackson
原始的boolean
作为字段和包装器Boolean
类需要单独注册才能工作。