杰克逊:在自定义字段 JsonDeserializer 中获取整个对象
Jackson: Get entire object in custom field JsonDeserializer
我有这个class:
@JsonIgnoreProperties(ignoreUnknown = true)
public class VehicleRestModel implements RestModel<Article> {
@JsonProperty("idVehicle")
public String id;
public String name;
}
我从 REST JSON 中得到这个 JSON:
[
{ "idVehicle" : "1234DHR", "tm" : "Hyundai", "model" : "Oskarsuko"},
//more vehicles
]
我希望我模型的字段 name
是 JSON 的字段 tm
和 model
连接起来的。我不得不使用 JsonDeserializer
但是,我怎样才能将整个 JSON 对象放入其中?
class MyDeserializer implements JsonDeserializer<String, String> {
@Override
public String deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
// I need the entire JSON here, in order to concatenate two fields
}
}
谢谢!
如果我理解你的问题,你可以有 2 个在同一个私有字段上工作的 setter,然后你可以用 @JsonProperty 而不是字段标记 setter。
这可以帮助你:@JsonProperty annotation on field as well as getter/setter
您也可以使用@JsonGetter("var") 和@JsonSetter("var") 而不是@JsonProperty。
编辑:好的,一个解决方案。这是我提交过的最丑陋的代码,但是如果你想要一个快速的东西并且你不能真正修改POJO原始接口(字段,getter)
public class VehicleRestModel {
private String concatValue = "";
private int splitIndex;
@JsonSetter("var1")
public setVar1(String var1){ concatValue = var1 + concatValue.substring(splitIndex,concatValue.length()); ; splitIndex = var1.length(); }
@JsonSetter("var2")
public setVar2(String var2){ concatValue = concatValue.substring(0,splitIndex) + var2; }
}
如果您在意,请小心处理空值,因为在此演示代码中它们会作为文字附加。
我有这个class:
@JsonIgnoreProperties(ignoreUnknown = true)
public class VehicleRestModel implements RestModel<Article> {
@JsonProperty("idVehicle")
public String id;
public String name;
}
我从 REST JSON 中得到这个 JSON:
[
{ "idVehicle" : "1234DHR", "tm" : "Hyundai", "model" : "Oskarsuko"},
//more vehicles
]
我希望我模型的字段 name
是 JSON 的字段 tm
和 model
连接起来的。我不得不使用 JsonDeserializer
但是,我怎样才能将整个 JSON 对象放入其中?
class MyDeserializer implements JsonDeserializer<String, String> {
@Override
public String deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
// I need the entire JSON here, in order to concatenate two fields
}
}
谢谢!
如果我理解你的问题,你可以有 2 个在同一个私有字段上工作的 setter,然后你可以用 @JsonProperty 而不是字段标记 setter。 这可以帮助你:@JsonProperty annotation on field as well as getter/setter
您也可以使用@JsonGetter("var") 和@JsonSetter("var") 而不是@JsonProperty。
编辑:好的,一个解决方案。这是我提交过的最丑陋的代码,但是如果你想要一个快速的东西并且你不能真正修改POJO原始接口(字段,getter)
public class VehicleRestModel {
private String concatValue = "";
private int splitIndex;
@JsonSetter("var1")
public setVar1(String var1){ concatValue = var1 + concatValue.substring(splitIndex,concatValue.length()); ; splitIndex = var1.length(); }
@JsonSetter("var2")
public setVar2(String var2){ concatValue = concatValue.substring(0,splitIndex) + var2; }
}
如果您在意,请小心处理空值,因为在此演示代码中它们会作为文字附加。