JAX-RS Param Converter-使用它编译时间错误

时间:2017-12-03 07:09:34

标签: rest api jax-rs converter

这是我的参数转换器

import org.springframework.data.domain.Sort;

public class MyParamConverter implements ParamConverter<Sort> {
    @Override
    public Sort fromString(String s){
        return new Sort(new Sort.Order(Sort.Direction.ASC, "ds"));
    }

    @Override
    public String toString(Sort mo){
        return mo.toString();
    }

}

这是我的paramconverter提供商

@Provider
public class MyParamConverterProvider implements ParamConverterProvider {

@Override
public <T> ParamConverter<T> getConverter(Class<T> rawType, Type genericType, Annotation[] annotations) {
    if(rawType.equals(Sort.class)){
        return (ParamConverter<T>) new MyParamConverter();
    }
    return null;
}

我正在尝试在我的API中使用

@GET
@Path("/")
Response read(@QueryParam("sort") Sort order);

我期待jax映射我在我的网址中传递的字符串,例如&sort="asc"排序对象。但是我得到have a registered implementation of paramconverter provider的编译时错误。我需要找到一种方法,当我将查询参数传递为&sort="somethung"时,它会通过使用自定义注释或使用SORT自动转换为Param Converter

1 个答案:

答案 0 :(得分:0)

参考您的评论,尝试注册您的提供商,如:

@ApplicationPath("/")
public class MyApplication extends ResourceConfig {

    @Override
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(MyParamConverterProvider.class);

        return classes;
    }
}

或者,如果您使用泽西岛

@ApplicationPath("/")
public class MyApplication extends ResourceConfig {

    public MyApplication() {
        packages("my.package");

        // or without package scanning
        register(MyParamConverterProvider.class);
    }
}