2017-01-12 4 views
1

J'implémente un ContainerResponseFilter qui ajouterait des liens hypermédia à la réponse.Filtre JAXRS-2.0: Comment ajouter des liens à ContainerResponse

La signature de la méthode dans le ContainerResponseFilter est:

public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException 

Malheureusement ContainerResponseContext ne me permet pas de définir un objet Response, et bien qu'il existe des méthodes getLinks(), il n'y a pas addLink(Link) ou setLinks(Link...) méthodes.

J'ai essayé

responseContext.setEntity(Response.ok().links(link).build()); 

mais qui a donné lieu à une exception qui dit qu'ils ne pouvaient trouver un MessageBodyWriter pour ResponseImpl. Également essayé

responseContext.getLinks().add(link); 

qui ne fonctionne pas non plus.

Quelqu'un a déjà fait cela?

Répondre

0

Vous devez injecter:

@Context HttpServletResponse r; 

comme un champ local. Tous les changements devraient être faits par là.

+0

:/Je ne veux pas manipuler la réponse directement ... Je lierai le marshalling/encoding et d'autres choses –

0

donc j'ai trouvé une façon de le faire, en remplaçant l'entité:

URI uri = uriInfo.getBaseUriBuilder().path(RESOURCE_CLASS).path(RESOURCE_METHOD).build(domain_object.getId()); 
JaxbLink jaxbLink = new JaxbLink(uri); 
responseContext.setEntity(jaxbLink); 

Pas certain que c'est 100% correct, mais il semble fonctionner.