Java Jackson@JsonDeserialize未在字段上工作

Java Jackson@JsonDeserialize未在字段上工作,java,jackson,json-deserialization,Java,Jackson,Json Deserialization,@JsonDeserialize未在字段上工作 使用弹簧靴2 代码: @数据 公共类EventOddPOJO{ @JsonProperty(“id”) 私有字符串id; @JsonDeserialize(使用=EventOddPartDeserializer.class) 私有字符串部分; @JsonProperty(“ss”) 私家弦乐谱; @JsonDeserialize(使用=EventOddMinuteDeserializer.class) 私人字符串分钟; @JsonDeseriali

@JsonDeserialize
未在字段上工作

使用弹簧靴2

代码:

@数据
公共类EventOddPOJO{
@JsonProperty(“id”)
私有字符串id;
@JsonDeserialize(使用=EventOddPartDeserializer.class)
私有字符串部分;
@JsonProperty(“ss”)
私家弦乐谱;
@JsonDeserialize(使用=EventOddMinuteDeserializer.class)
私人字符串分钟;
@JsonDeserialize(使用=EventOddSecondDeserializer.class)
私有字符串第二;
@JsonProperty(“超过od”)
私用线绳;
@JsonProperty(“住宅区”)
私有字符串同源;
@JsonProperty(“图纸”)
私用线绳;
@JsonProperty(“离开”)
私人字符串awayOd;
@JsonProperty(“在od下”)
私用线绳;
@JsonProperty(“时间街”)
私有字符串timeStr;
@JsonProperty(“添加时间”)
私有字符串addTime;
@JsonProperty(“障碍”)
私人弦障碍;
公共静态类EventOddPartDeserializer扩展StdDeserializer{
public EventOddPartDeserializer(){
这个(空);
}
public EventOddPartDeserializer(类<?>vc){
超级(vc);
}
@凌驾
公共字符串反序列化(JSONP,反序列化上下文ctxt)引发IOException,
JsonProcessingException{
字符串timeStr=p.getValueAsString(“timeStr”);
if(Objects.isNull(timeStr)){
返回“-”;
}
返回timeStr.split(“-”[0];
}
}
公共静态类EventOddMinuteDeserializer扩展StdDeserializer{
公共事件ODDMinutedSerializer(){
这个(空);
}
公共事件ODDMinutedSerializer(类别<?>vc){
超级(vc);
}
@凌驾
公共字符串反序列化(JSONP,反序列化上下文ctxt)引发IOException,
JsonProcessingException{
字符串timeStr=p.getValueAsString(“timeStr”);
if(Objects.isNull(timeStr)){
返回“-”;
}
返回timeStr.split(“-”[1]。split(“:”[0];
}
}
公共静态类EventOddSecondDeserializer扩展StdDeserializer{
public EventOddSecond反序列化程序(){
这个(空);
}
公共事件反序列化器(类<?>vc){
超级(vc);
}
@凌驾
公共字符串反序列化(JSONP,反序列化上下文ctxt)引发IOException,
JsonProcessingException{
字符串timeStr=p.getValueAsString(“timeStr”);
if(Objects.isNull(timeStr)){
返回“-”;
}
返回timeStr.split(“-”[1]。split(“:”[1];
}
}
}
Json:


对于
JSON
payload中的相同值,不能同时使用3个不同的反序列化程序。如果需要将值解析为3个不同的属性,可以创建新的
POJO
,并在自定义反序列化程序中实现解析

POJO
-s:

@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;
}
自定义反序列化程序:

class EventOddPartDeserializer extends JsonDeserializer<EventOddPart> {

    @Override
    public EventOddPart deserialize(JsonParser p, DeserializationContext ctxt) throws IOException{
        String timeStr = p.getValueAsString();

        EventOddPart eop = new EventOddPart();
        if (Objects.isNull(timeStr)) {
            return eop;
        }
        String[] parts = timeStr.split(" - ");
        String[] minSecs = parts[1].split(":");
        eop.setPart(parts[0]);
        eop.setMinute(minSecs[0]);
        eop.setSecond(minSecs[1]);

        return eop;
    }
}
类EventOddPartDeserializer扩展JsonDeserializer{
@凌驾
public EventOddPart反序列化(JsonParser p,DeserializationContext ctxt)引发IOException{
字符串timeStr=p.getValueAsString();
EventOddPart eop=新的EventOddPart();
if(Objects.isNull(timeStr)){
返回eop;
}
String[]parts=timeStr.split(“-”);
字符串[]minSecs=parts[1]。拆分(“:”;
eop.setPart(零件[0]);
eop.setMinute(分钟[0]);
eop.设定秒(分秒[1]);
返回eop;
}
}

您是否收到任何错误消息?为什么你认为它不起作用?@flaxel我的调试器断点在
反序列化
方法中不起作用。任何错误。我甚至不确定这将如何编译,公共EventOddPartDeserializer(类vc)请包含您尝试使用的JSONdeserialize@lane.maxwell附加的JSON
class EventOddPartDeserializer extends JsonDeserializer<EventOddPart> {

    @Override
    public EventOddPart deserialize(JsonParser p, DeserializationContext ctxt) throws IOException{
        String timeStr = p.getValueAsString();

        EventOddPart eop = new EventOddPart();
        if (Objects.isNull(timeStr)) {
            return eop;
        }
        String[] parts = timeStr.split(" - ");
        String[] minSecs = parts[1].split(":");
        eop.setPart(parts[0]);
        eop.setMinute(minSecs[0]);
        eop.setSecond(minSecs[1]);

        return eop;
    }
}