我有以下类结构(我尝试只发布与我的问题相关的代码):
这三个单一类:
abstract public class AbstractController {
@Context
HttpServletRequest request;
[...]
protected int getSomething() {
if (request == null) {
return doSomething();
} else {
return doSomethingElse();
}
}
[...]
}
@Produces("application/json")
abstract public class AbstractPageController extends AbstractController {
[...]
}
public class BaseController extends AbstractPageController {
private int selectedSomething;
[...]
public BaseController(@QueryParam("monthIdentifier") Integer something) throws SQLException {
selectedSomething = getSomething();
[...]
}
public int getSelectedSomething() { return selectedSomething; }
}
以及具有以下结构的多个类:
@Path("/foo/bar")
@Produces("application/json")
public class FooBarController extends BaseController {
@GET
public Response renderPage() {
int something = getSelectedSomething();
}
}
问题基本上是request
中的AbstractController
变量始终为空。
我需要基于请求的东西,我需要每个请求。
当我重写代码以便我在每个FooBarController
中访问请求并将其传递给getSelectedFunction()
时,它可以正常工作。
但这很丑陋且难以维护,我不想更改每个FooBarController,因为有很多。我是否以错误的方式访问request
中的AbstractController
,或者根本不可能?
答案 0 :(得分:0)
问题是您正试图在子类的构造函数中访问注入的参数。该类需要在创建其字段之前完全创建。
public BaseController(@QueryParam("monthIdentifier") Integer something) throws SQLException {
selectedSomething = getSomething(); // <-- injection in superclass has not happened yet
所以答案是:可能,但不是从构造函数中获取。如果您是从REST端点访问的,则它不会为NULL。