2013-07-26 206 views
22

我想實現以下目標。自定義響應頭澤西/ Java

從請求讀取自定義標題,並將其值:現在

name: username 

,上回應,我想回到相同的標題name:value一對HTTP響應。

我正在使用JAX-RS webservice的Jersey 2.0實現。

當我發送請求URL Http://localhost/test/時,也會傳遞請求標頭(目前,儘管Firefox插件對它們進行了硬編碼)。

在接收該URL請求,下面的方法被調用:

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public UserClass getValues(@Context HttpHeaders header) { 
    MultivaluedMap<String, String> headerParams = header.getRequestHeaders(); 
    String userKey = "name"; 
    headerParams.get(userKey); 

    // ... 

    return user_object; 
} 

我怎麼可能做到這一點?任何指針都會很棒!

回答

30

只需要注入一個@Context HttpServletResponse response作爲方法參數。改變對

@Produces(MediaType.APPLICATION_JSON) 
public UserClass getValues(@Context HttpHeaders header, @Context HttpServletResponse response) { 
    response.setHeader("yourheadername", "yourheadervalue"); 
    ... 
} 
+1

它需要我添加額外的庫嗎?它說未識別的類「HttpServletResponse」。 – Namenoobie

+0

@Namenoobie您需要服務器運行時庫。這基本上是servlet api。如果您使用的是Eclipse,請轉至您的項目Java構建路徑並添加庫。 –

+0

當我按照說明操作時,我得到了本地機器上已存在的Tomcat服務器。 – Namenoobie

2

返回一個Response(來自JAX-RS的一個類)與UserClass作爲實體。在Response上,您可以設置HTTP標頭。

+2

對不起,我不關注。你能詳細說明一下嗎? – Namenoobie

44

我認爲使用javax.ws.rs.core.Response頭更優雅,這是新澤西州的一個組成部分。只是爲了擴大以前的答案,這裏是一個簡單的例子:

@GET 
    @Produces({ MediaType.APPLICATION_JSON }) 
    @Path("/values") 
    public Response getValues(String body) { 

     //Prepare your entity 

     Response response = Response.status(200). 
       entity(yourEntity). 
       header("yourHeaderName", "yourHeaderValue").build(); 

     return response; 
    } 
+4

這應該是選定的答案。 – reinaldoluckman

+5

,使它更加簡單,用'.ok'代替'.status(200).entity'。 –

+0

這可能會導致使用[swagger codegen](https://github.com/swagger-api/swagger-codegen)生成自動API文檔的問題。 – koppor