Возвращение кода ответа 200 вместо 204 - PullRequest
0 голосов
/ 18 февраля 2012

Это мой метод создания Ответа с параметрами заголовка и телом:

public Response sendOKResponse(request req)
{
    ResponseBuilderImpl builder = new ResponseBuilderImpl();
    // set the header params.
    for(int index =0; index<req.headerParameters.size(); index++)
    {
        builder.header(req.headerParameters.get(index).getName(), req.headerParameters.get(index).getBody());
    }

    // set the body and response code
    builder.status(Response.Status.OK).entity(req.getBody());
    Response r = builder.build();
    return r;
}

И вот как я возвращаю Ответ:

Response response;
response = sendBadMesseage();
        return response;

Этот код возвращает код 204 (Нетсодержание) вместо 200. Есть идеи почему?

1 Ответ

1 голос
/ 18 февраля 2012

Вы не должны создавать экземпляр своего построителя ответов с помощью new, весь смысл уровня абстракции JAX-RS состоит в том, чтобы скрыть детали реализации от вызывающих клиентов.Это то, что позволяет иметь различные реализации поставщиков, которые могут быть заменены по желанию.Кроме того, если вы используете JEE6 или надеетесь перейти на него, этот код почти наверняка потерпит неудачу.Большинство реализаций поставщика JEE6 используют CDI, который несовместим с концепцией new.Но, ближе к теме, реализация JAX-RS указывает, что код состояния 204 будет возвращен, если обернутая сущность ответа равна нулю.Вы можете убедиться, что это не так в любом из ваших методов.Кроме того, вы можете внести некоторые изменения в свой код:

public Response sendOKResponse(request req) {
    ResponseBuilder response = Response.ok();

    // set the header params.
    for(Header h: req.headerParameters()) {
        builder = builder.header(h.getName(), h.getValue());
    }

    // set the body and response code
    builder = builder.entity(req.getBody());

    return builder.build();
}

Ваш метод sendBadMessage также должен выглядеть примерно так, как описано выше.Вы можете зарегистрировать свою сущность перед добавлением ее в конструктор, чтобы убедиться, что вы получите 204, только когда она нулевая.

...