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;
}
}