我有一个REST接口,定义如下
public interface UserService {
@GZIP
@POST
Response createUser(@HeaderParam("hostName") String hostName, User user);
}
我想再阅读两个标题 - addToCache
和useCache
。显而易见的解决方案是在上面的签名中添加标题。
虽然这对于通过其他客户端进行显式HTTP调用是有效的,但修改接口签名会破坏已使用REST代理服务连接到上述服务的功能测试代码库中的向后兼容性。
我看到的唯一出路是将User
对象中的两个参数传递给它。还有另一种出路吗?
答案 0 :(得分:1)
您可以将标题参数作为实现类中的字段注入:
public interface UserService {
Response createUser(String hostName, User user);
}
@Path("/userservice")
public class UserServiceRestImpl implements UserService{
@HeaderParam("addToCache")
private String addToCache;
@HeaderParam("useCache")
private String useCache;
@GZIP
@POST
Response createUser(@HeaderParam("hostName") String hostName, User user){
System.out.println(addToCache);
System.out.println(useCache);
}
}
更新: 尝试禁用自动扫描并明确指定资源:
<!-- disabled auto scanning
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
-->
<context-param>
<param-name>resteasy.resources</param-name>
<param-value>com.yourpackage.UserServiceRestImpl</param-value>
</context-param>
UPDATED2:你也可以尝试注入@Context HttpHeaders而不是@HeaderParam:
private @Context HttpHeaders headers;
...
String addToCache = headers.getHeaderString("addToCache");