抽象类中的@Context请求

时间:2017-03-08 13:40:27

标签: java jax-rs

我有以下类结构(我尝试只发布与我的问题相关的代码):

这三个单一类:

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,或者根本不可能?

1 个答案:

答案 0 :(得分:0)

问题是您正试图在子类的构造函数中访问注入的参数。该类需要在创建其字段之前完全创建。

public BaseController(@QueryParam("monthIdentifier") Integer something) throws SQLException {
        selectedSomething = getSomething(); // <-- injection in superclass has not happened yet

所以答案是:可能,但不是从构造函数中获取。如果您是从REST端点访问的,则它不会为NULL。