首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >杰克逊。ClassCastException,而值来自泛型类

杰克逊。ClassCastException,而值来自泛型类
EN

Stack Overflow用户
提问于 2014-12-26 11:58:57
回答 1查看 784关注 0票数 0

我有个DTO

代码语言:javascript
运行
复制
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 }}并尝试获得双值时:

代码语言:javascript
运行
复制
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)。

代码语言:javascript
运行
复制
public String getLinks(
            @RequestBody FilterSet filterData
    ) {
        ...
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-26 14:13:52

可以使用以下JSON (其中使用整数)再现错误。

代码语言:javascript
运行
复制
 {"price":{ "value" : { "from" : 1, "to" : 2.1 } } }

为了避免这个问题,必须使用泛型类型声明IntervalValue的所有引用(即使用IntervalValue是强制的,因为它是在代码中声明的)。因此,如果您将setter更改为以下内容,它将按预期工作:

代码语言:javascript
运行
复制
public void setValue(IntervalValue<T> value) {
     this.value = value;
}

注意,参数的类型是IntervalValue<T>,而不是原始代码中的IntervalValue

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27656832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档