2017-01-12 4 views
1

回答にハイパーメディアリンクを追加するContainerResponseFilterを実装しています。JAXRS-2.0フィルター:ContainerResponseへのリンクを追加する方法

ContainerResponseFilterのメソッドシグネチャは次のとおりです。

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

は残念ながらContainerResponseContextは私がResponseオブジェクトを設定することはできません。また、getLinks()方法がある一方で、addLink(Link)またはsetLinks(Link...)方法がありません。

私は

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

を試してみましたが、それは彼らがResponseImplためMessageBodyWriterを見つけることができると述べた例外が発生しました。他にも試しました

responseContext.getLinks().add(link); 

どちらも動作しません。

誰でもこれを行ったことがありますか?

答えて

0

あなたは注入しなければならない:

@Context HttpServletResponse r; 

を地元のフィールドとして。すべての変更はそこを介して行われる必要があります。

+0

:/私は直接レスポンスを操作したくありません...マーシャル/エンコーディングと何かが起こるようにリンクします –

0

だから私は、エンティティを置き換えることで、これを行う方法を見つけました:

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

ない特定のを、これは100%正しいですが、動作しているようです。

関連する問題