Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Jax Rs/Appfuse应用程序中获取HttpServletRequest?_Java_Rest_Servlets_Jax Rs_Appfuse - Fatal编程技术网

Java 在Jax Rs/Appfuse应用程序中获取HttpServletRequest?

Java 在Jax Rs/Appfuse应用程序中获取HttpServletRequest?,java,rest,servlets,jax-rs,appfuse,Java,Rest,Servlets,Jax Rs,Appfuse,我使用AppFuse创建了一个基本的应用程序外壳,并按照下面的步骤使用Jax-RS创建了一个简单的RESTful服务。这很好。调用http://localhost:8080/services/api/persons将Person对象的集合返回为Json格式的字符串,其中包含正确的数据 我现在想从Appfuse公开的RESTful服务中访问ServletRequest和ServletResponse对象(使用另一个需要这些对象的库) 我认为可以通过添加@Context注释来实现,例如,在this和

我使用AppFuse创建了一个基本的应用程序外壳,并按照下面的步骤使用Jax-RS创建了一个简单的RESTful服务。这很好。调用
http://localhost:8080/services/api/persons
将Person对象的集合返回为Json格式的字符串,其中包含正确的数据

我现在想从Appfuse公开的RESTful服务中访问
ServletRequest
ServletResponse
对象(使用另一个需要这些对象的库)

我认为可以通过添加@Context注释来实现,例如,在this和this之后

但是,如果我添加@Context标记(见下文),它可以很好地编译,但在服务器重新启动时抛出异常(附在底部)

以下是
@WebService
的声明:

@WebService
@Path("/persons")
public interface PersonManager extends GenericManager<Person, Long> {
    @Path("/")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    List<Person> read();
    ...
}
希望我错过了一些简单的东西,或者是让它工作的东西,或者是意识到获取ServletRequest是不可能的,因为。。。。任何线索都欢迎

我在IntelliJ的Tomcat上运行这个

==异常堆栈跟踪(截断)==


尝试直接注入
HttpServletRequest
HttpServletContext

@Context private HttpServletRequest servletRequest;
@Context private HttpServletContext servletContext;

将其添加到方法签名有效。我想这是因为在实例化类时请求和响应对象还不存在,但在浏览器调用时却存在

@Path("/")
@GET
@Produces(MediaType.APPLICATION_JSON)
List<Person> read( @Context HttpServletRequest httpServletRequest, @Context HttpServletResponse httpServletResponse) { }
@Path(“/”)
@得到
@产生(MediaType.APPLICATION_JSON)
列表读取(@Context-HttpServletRequest-HttpServletRequest,@Context-HttpServletResponse-HttpServletResponse){}

非常感谢!尽管这并没有完全按照所写的那样工作,但它给出了一个不同的例外,再加上引用HttpServletRequest而不仅仅是ServletRequest的想法,是找到如何正确包含它的最佳线索。a+1而不是检查是否合适?嗯,这很奇怪。实际上,我是直接从一个正常运行的程序中粘贴代码的。请随意将您的解决方案作为一个答案发布,这样它可以使其他人受益。然后,我必须在我的列表中添加另一项内容,以了解restful服务是如何工作的。知道这一点也很有帮助。再次感谢!此选项强制您使用实例变量,您可能希望使用它作为方法参数来注入请求、响应变量。令人惊讶的是,即使在没有使用Spring或其他CDI框架的情况下,此选项也能正常工作。
@Context private HttpServletRequest servletRequest;
@Context private HttpServletContext servletContext;
@Path("/")
@GET
@Produces(MediaType.APPLICATION_JSON)
List<Person> read( @Context HttpServletRequest httpServletRequest, @Context HttpServletResponse httpServletResponse) { }