问题描述
@JsonDeserialize
在字段上不起作用。
使用Spring Boot 2。
代码:
@Data
public class EventOddPOJO {
@JsonProperty("id")
private String id;
@JsonDeserialize(using = EventOddPartDeserializer.class)
private String part;
@JsonProperty("ss")
private String score;
@JsonDeserialize(using = EventOddMinuteDeserializer.class)
private String minute;
@JsonDeserialize(using = EventOddSecondDeserializer.class)
private String second;
@JsonProperty("over_od")
private String overOd;
@JsonProperty("home_od")
private String homeOd;
@JsonProperty("draw_od")
private String drawOd;
@JsonProperty("away_od")
private String awayOd;
@JsonProperty("under_od")
private String underOd;
@JsonProperty("time_str")
private String timeStr;
@JsonProperty("add_time")
private String addTime;
@JsonProperty("handicap")
private String handicap;
public static class EventOddPartDeserializer extends StdDeserializer < String > {
public EventOddPartDeserializer() {
this(null);
}
public EventOddPartDeserializer(Class < ? > vc) {
super(vc);
}
@Override
public String deserialize(JsonParser p,DeserializationContext ctxt) throws IOException,JsonProcessingException {
String timeStr = p.getValueAsstring("timeStr");
if (Objects.isNull(timeStr)) {
return "-";
}
return timeStr.split(" - ")[0];
}
}
public static class EventOddMinuteDeserializer extends StdDeserializer < String > {
public EventOddMinuteDeserializer() {
this(null);
}
public EventOddMinuteDeserializer(Class < ? > vc) {
super(vc);
}
@Override
public String deserialize(JsonParser p,JsonProcessingException {
String timeStr = p.getValueAsstring("timeStr");
if (Objects.isNull(timeStr)) {
return "-";
}
return timeStr.split(" - ")[1].split(":")[0];
}
}
public static class EventOddSecondDeserializer extends StdDeserializer < String > {
public EventOddSecondDeserializer() {
this(null);
}
public EventOddSecondDeserializer(Class < ? > vc) {
super(vc);
}
@Override
public String deserialize(JsonParser p,JsonProcessingException {
String timeStr = p.getValueAsstring("timeStr");
if (Objects.isNull(timeStr)) {
return "-";
}
return timeStr.split(" - ")[1].split(":")[1];
}
}
}
Json:
{
"id": "35008186","home_od": "1.952","handicap": "+3.5","away_od": "1.740","ss": "95:98","time_str": "4 - 04:08","add_time": "1603807890"
}
解决方法
对于interface list {
one: string
two: string
}
const myNumber = "one"
有效负载中的相同值,您不能同时使用3个不同的反序列器。如果您需要将值解析为3个不同的属性,则可以创建新的JSON
并在自定义反序列化器中实现解析。
POJO
-s:
POJO
自定义反序列化器:
@Data
class EventOddPOJO {
@JsonProperty("id")
private String id;
@JsonProperty("ss")
private String score;
@JsonProperty("over_od")
private String overOd;
@JsonProperty("home_od")
private String homeOd;
@JsonProperty("draw_od")
private String drawOd;
@JsonProperty("away_od")
private String awayOd;
@JsonProperty("under_od")
private String underOd;
@JsonDeserialize(using = EventOddPartDeserializer.class)
@JsonProperty("time_str")
private EventOddPart timeStr;
@JsonProperty("add_time")
private String addTime;
@JsonProperty("handicap")
private String handicap;
}
@Data
class EventOddPart {
private String part;
private String minute;
private String second;
}