我认为这是不可能的,但我只是想验证。
我想做点像......
@Path("/awesome")
public class MyRestResource {
@GET
public void coolQuery(@QueryParam("user") User) {
// ...
}
}
public interface User {
String name();
Address address();
}
(请不要对这个例子发表评论......它是完全弥补而不是我的用例。)
我想这是不可能的,因为Jersey / JAX-RS通常需要静态方法public static T valueOf(String input)
,这显然是接口无法实现的。
那就是说,有没有办法解决这个问题,让查询参数成为一个接口?如果是这样,您如何指定解析器/解析逻辑?
由于
答案 0 :(得分:1)
根据documentation,除了静态valueOf
方法之外,还有更多方法:
- 是原始类型;
- 拥有一个接受单个String参数的构造函数;
- 有一个名为
valueOf
或fromString
的静态方法接受单个String参数(例如,请参阅Integer.valueOf(String)
和java.util.UUID.fromString(String)
);- 具有
javax.ws.rs.ext.ParamConverterProvider
JAX-RS扩展SPI的注册实现,该实现返回javax.ws.rs.ext.ParamConverter
实例,该实例能够为该类型进行“from string”转换。或- 为
醇>List<T>
,Set<T>
或SortedSet<T>
,其中T
满足上述2或3。生成的集合是只读的。
使用ParamConverterProvider
的解决方案应该适用于这种情况。