我需要反序列化一个长而复杂的json,为此我编写了一组java类来映射数据,并且我必须为许多不同类型的字段(包括字符串,布尔,BigDecimal等)编写自定义反序列化器。
我知道我可以使用相应的自定义反序列化程序(如下所示)注释java类中的所有字段,但是我需要注释所有类中的几乎所有字段。
@JsonDeserialize(using = CustomBooleanJsonDeserializer.class)
private boolean active;
我也知道我可以在Spring默认值中注册一个模块(就像这里一样),但我只想将这些自定义反序列化程序用于这些特定的类。ObjectMapper
@Bean
public Module customDeserializersModule() {
SimpleModule module = new SimpleModule();
module.addDeserializer(Boolean.class, new CustomBooleanJsonDeserializer());
// add other custom deserializers
return module;
}
我甚至知道我可以在中使用自定义,但我不想放弃通过 自动数据绑定的便利性,因为我必须防止其他人在没有必要的自定义反序列化程序的情况下使用它。ObjectMapperRestController@RequestBody
@RequestMapping(method = RequestMethod.POST, value = "/data")
public ResponseEntity<ServerInfo> register(@RequestBody DataMapper data) {
// DataMapper is the target POJO class of the json's deserialization
}
简而言之,我正在课堂上寻找这样的东西:
@JsonDeserialize(using = CustomStringJsonDeserializer.class, forType = String.class)
@JsonDeserialize(using = CustomBooleanJsonDeserializer.class, forType = Boolean.class)
@JsonDeserialize(using = CustomBigDecimalJsonDeserializer.class, forType = BigDecimal.class)
public class DataMapper implements Serializable {
// obviously, @JsonDeserialize doesn't have a forType method
}
或者某种为类实现自定义反序列化器的方法,该方法定义了如何根据其数据类型反序列化每个字段(而无需注释每个字段):DataMapper
@JsonDeserialize(using = DataMapperJsonDeserializer.class)
public class DataMapper implements Serializable {
// How can I implement the DataMapperJsonDeserializer with these
// characteristics? I know about the ContextualDeserializer interface,
// but I don't know how to use it without annotating each field.
}
或者以某种方式将模块的效果限制为仅一个包或一组类:
module.restrictedTo(/*some package or set of classes*/);
// com.fasterxml.jackson.databind.Module doesn't have a restrictedTo method
慕运维8079593
qq_遁去的一_1
相关分类