1
我正在遭受Spring-Mybatis多態性問題。下面是詳細: 我有一個Entity
:春天Mybatis多態性
public class SegmentEntity {
private int id;
private String name;
private Filter filter;
// getter and setter
}
public class Filter {
private String type;
}
其中濾波器是多態的。 上有過濾某些子類,如:
public class OneFilter extends Filter {
private String field1;
private int field2;
}
public class AnotherFilter extends Filter {
private List<Integer> field3;
private double field4;
}
正如你可以看到,每個子類都有不同的type
不同的架構。
和MySQL表segment
像:
CREATE TABLE `segment` {
`id` int(11) NUL NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
`filter` varchar(1024) NOT NULL,
PRIMARY KEY (`id`)
} ENGINE=InnoDB DEFAULT CHARSET=utf8;
因此,爲了在MYSQL反序列化filter
(VARCHAR)我做這個FilterTypeHandler:
public class FilterTypeHandler implements TypeHandler<Filter> {
@Override
public Filter getResult(ResultSet rs, String columnName) throws SQLException {
String json = rs.getString(columnName);
Filter filter = null;
try {
filter = new ObjectMapper().readValue(json, Filter.class);
} catch (IOException e) {}
return filter;
}
}
,爲了讓傑克遜做多態反序列化,我更換過濾器類:
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({@JsonSubTypes.Type(value = OneFilter.class, name = "someTypeName"),
@JsonSubTypes.Type(value = AnotherFilter.class, name = "anotherTypeName")})
public class Filter {
private String type;
}
但結果是,傑克遜ObjectMapper不能反序列化所有消息。
那麼有什麼不對嗎?我應該做什麼正確的步驟? 任何有用的鏈接或文檔都很有幫助。
一個另外,當使用Controller(如SegmentController)創建e segmentEntity(@RequestBody SegmentEntity segmentEntity)時,反序列化也很難編碼。 –