Java 在Jax Rs/Appfuse应用程序中获取HttpServletRequest?
我使用AppFuse创建了一个基本的应用程序外壳,并按照下面的步骤使用Jax-RS创建了一个简单的RESTful服务。这很好。调用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和
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) { }