我有个DTO
public class FilterSet {
@JsonProperty("price")
private IntervalFilter<Double> priceFilter;
public IntervalFilter<Double> getPriceFilter() {
return priceFilter;
}
public void setPriceFilter(IntervalFilter<Double> priceFilter) {
this.priceFilter = priceFilter;
}
public static class IntervalFilter<T> {
private IntervalValue<T> value;
public IntervalValue<T> getValue() {
return value;
}
public void setValue(IntervalValue value) {
this.value = value;
}
public static class IntervalValue<T> {
private T from;
private T to;
public T getFrom() {
return from;
}
public void setFrom(T from) {
this.from = from;
}
public T getTo() {
return to;
}
public void setTo(T to) {
this.to = to;
}
}
}
}
当我发送priceFilter {“价格”:{“值”:{“从”:1.1,“到”:1.2 }}时,就可以了。当我发送priceFilter {“价格”:{“值”:{“从”:1.0,“到”:2.0 }}并尝试获得双值时:
Double priceFrom = priceFilter.getValue().getFrom();
我看到java.lang.ClassCastException: java.lang.Integer不能转换为java.lang.Double
我做错什么了?
详细信息: Json:{“”:{ "value“:{ "from”:1.0,"to“:2.1 }}
我有一个来自Spring控制器的对象FilterSet。在这里,我可以看到一个字段"priceFilter“(键入IntervalFilter),其中字段”IntervalValue“(类型IntervalValue)和字段"from”(类型为Integer)和"to“(类型为Double)。
public String getLinks(
@RequestBody FilterSet filterData
) {
...
}
发布于 2014-12-26 14:13:52
可以使用以下JSON (其中使用整数)再现错误。
{"price":{ "value" : { "from" : 1, "to" : 2.1 } } }
为了避免这个问题,必须使用泛型类型声明IntervalValue
的所有引用(即使用IntervalValue
是强制的,因为它是在代码中声明的)。因此,如果您将setter更改为以下内容,它将按预期工作:
public void setValue(IntervalValue<T> value) {
this.value = value;
}
注意,参数的类型是IntervalValue<T>
,而不是原始代码中的IntervalValue
。
https://stackoverflow.com/questions/27656832
复制相似问题