Configure os cabeçalhos de resposta JAX-RS na implementação sem expor HttpServletResponse na interface

Eu tenho uma implementação de servidor RESTful e também uma biblioteca para os clientes fazerem as chamadas, todos usando JAX-RS. Os componentes do servidor são divididos em interfaceFooResource e implementaçãoFooResourceService.

Para que as bibliotecas cliente e servidor compartilhem o caminho RESTful e outras definições, eu queria dividir oFooResource interface em seu próprio projeto:

@Path(value = "foo")
public interface FooResource {

  @GET
  public Bar getBar(@PathParam(value = "{id}") int id) {

Eu quero definir alguns cabeçalhos na resposta. Uma maneira fácil de fazer isso é usar@Context HttpServletResponse na assinatura do método:

  public Bar getBar(@PathParam(value = "{id}") int id, @Context HttpServletResponse servletResponse) {

Mas o problema é que isso expõe detalhes de implementação na interface. Mais especificamente, de repente, é necessário que meu projeto de definição REST (que é compartilhado entre o cliente e a biblioteca do servidor) puxe ojavax.servlet-api dependência --- algo que o cliente não precisa (ou deseja).

Como minha implementação do serviço de recurso RESTful pode definir cabeçalhos de resposta HTTP sem puxar essa dependência na interface do recurso?

eu vium post recomendando que eu injete o HttpServletResponse como um membro da classe. Mas como isso funcionaria se minha implementação do serviço de recursos fosse um singleton? Ele usa algum tipo de proxy com locais de encadeamento ou algo que calcula a resposta correta do servlet, mesmo que a classe singleton seja usada simultaneamente por vários encadeamentos? Existem outras soluções?

questionAnswers(3)

yourAnswerToTheQuestion