我如何将 @JsonSerialize 注释应用于库 class 属性?
How can i apply @JsonSerialize annotation to a lib class property?
我在项目中使用外部库。其中一个模型有一个 BigDecimal 属性,需要自定义精度。如果这个模型是我的,我会应用一个使用自定义序列化器的@JsonSerialize 注释。但我不能修改分机的来源。自由...
有没有办法以某种方式应用它?
Jackson 正是为这个用例提供了所谓的 mixins。
为了说明如何使用它,让我们来看一个例子:
假设您有一个库 class(名为 Model
)包含
类型为 BigDecimal
的 属性。`
public class Model {
private BigDecimal number;
public BigDecimal getNumber() {
return number;
}
public void setNumber(BigDecimal number) {
this.number = number;
}
}
现在,您无法修改上述库的源代码class。
但是,您可以写一个 class(我们称它为 ModelMixin
)
哪种镜像库 class Model
和
把任何杰克逊注释放在那里。
特别是你可以指定你自己的序列化器
BigDecimal number
属性.
public abstract class ModelMixin {
@JsonSerialize(using = MyBigDecimalSerializer.class)
private BigDecimal number;
}
序列化程序可能简单也可能复杂
正如你所需要的。这是一个简单的
选择将 BigDecimal
写成 JSON 字符串。
public class MyBigDecimalSerializer extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeString(value.toString());
}
}
现在你需要告诉杰克逊 ObjectMapper
从 ModelMixin
class 中获取注释
并将它们应用于 Model
class。
这是由 addMixIn(Class,Class)
method.
完成的
ObjectMapper objectMapper = new ObjectMapper()
.addMixIn(Model.class, ModelMixin.class);
Model model = new Model();
model.setNumber(BigDecimal.valueOf(123.456));
objectMapper.writeValue(System.out, model);
这将写入以下 JSON 输出:
{"number":"123.456"}
我在项目中使用外部库。其中一个模型有一个 BigDecimal 属性,需要自定义精度。如果这个模型是我的,我会应用一个使用自定义序列化器的@JsonSerialize 注释。但我不能修改分机的来源。自由... 有没有办法以某种方式应用它?
Jackson 正是为这个用例提供了所谓的 mixins。 为了说明如何使用它,让我们来看一个例子:
假设您有一个库 class(名为 Model
)包含
类型为 BigDecimal
的 属性。`
public class Model {
private BigDecimal number;
public BigDecimal getNumber() {
return number;
}
public void setNumber(BigDecimal number) {
this.number = number;
}
}
现在,您无法修改上述库的源代码class。
但是,您可以写一个 class(我们称它为 ModelMixin
)
哪种镜像库 class Model
和
把任何杰克逊注释放在那里。
特别是你可以指定你自己的序列化器
BigDecimal number
属性.
public abstract class ModelMixin {
@JsonSerialize(using = MyBigDecimalSerializer.class)
private BigDecimal number;
}
序列化程序可能简单也可能复杂
正如你所需要的。这是一个简单的
选择将 BigDecimal
写成 JSON 字符串。
public class MyBigDecimalSerializer extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeString(value.toString());
}
}
现在你需要告诉杰克逊 ObjectMapper
从 ModelMixin
class 中获取注释
并将它们应用于 Model
class。
这是由 addMixIn(Class,Class)
method.
ObjectMapper objectMapper = new ObjectMapper()
.addMixIn(Model.class, ModelMixin.class);
Model model = new Model();
model.setNumber(BigDecimal.valueOf(123.456));
objectMapper.writeValue(System.out, model);
这将写入以下 JSON 输出:
{"number":"123.456"}