【问题标题】:ParamConverterProvider method return type mismatchParamConverterProvider 方法返回类型不匹配
【发布时间】:2014-06-17 05:08:14
【问题描述】:

在下面的代码 sn-p 中,我在 Provider 类中不断收到以下错误。

类型不匹配:无法从 DemoParamConverter 转换为 参数转换器

package com.ofss.shop.application.translators;

import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.Provider;

@Provider
public class DemoParamConverterProvider {

    private final DemoParamConverter dpc = new DemoParamConverter();

    public <T> ParamConverter<T> getConverter(Class<T> rawType,
            Type genericType, Annotation[] annotations) {

        return dpc;
    }


}

package com.ofss.shop.application.translators;
import javax.ws.rs.ext.ParamConverter;
import com.restfully.shop.domain.JavaConversionTarget;
public class DemoParamConverter implements ParamConverter<JavaConversionTarget> {

    @Override
    public JavaConversionTarget fromString(String value) {

        JavaConversionTarget jct = new JavaConversionTarget();
        jct.setJctName(value);
        return jct;
    }

    @Override
    public String toString(JavaConversionTarget value) {
        return value.toString();
    }

}

public class JavaConversionTarget {

    private String jctName;

    /**
     * @return the jctName
     */
    public String getJctName() {
        return jctName;
    }

    /**
     * @param jctName the jctName to set
     */
    public void setJctName(String jctName) {
        this.jctName = jctName;
    }

    @Override
    public String toString() {      
        return "JavaConversionTarget-toString with jctName"+ jctName;
    }

}

我正在使用 Eclipse Kepler、JDK1.7、Jersey2.4。

【问题讨论】:

  • DemoParamConverterProvider不应该实现接口ParamConverterProvider吗?

标签: jax-rs java-7 eclipse-kepler jersey-2.0


【解决方案1】:

我遇到了同样的问题,最后返回了一个匿名的ParamConverter

@Provider
public class MyConverterProvider implements ParamConverterProvider {

    @Override
    public <T> ParamConverter<T> getConverter(final Class<T> rawType, final Type genericType,
            final Annotation[] annotations) {
        if (rawType.getName().equals(MyBean.class.getName())) {
            return new ParamConverter<T>() {

                @Override
                public T fromString(String value) {
                    MyBean myBean = new MyBean();
                    myBean.setValue(value);
                    return rawType.cast(myBean);
                }

                @Override
                public String toString(T myBean) {
                    if (myBean == null) {
                        return null;
                    }
                    return myBean.toString();
                }
            };
        }
        return null;
    }
}

如果有帮助,我推送了一个示例 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2020-03-30
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多