2013-02-06 15 views
0

在球衣中,Java bean可以在請求體內自動反序列化,但是如果我想在不創建特殊類型的情況下讀取參數,該怎麼辦。有沒有可能使用註釋做到這一點。是否有可能得到球衣閱讀json變量我們的請求正文,而不使用bean?

我當前的代碼是:

public class RequestData { 
    String param; 
} 

... 

public Response readData(RequestData data) { 
    data.getParam(); 
    ... 
} 

我希望它是這樣的:

public Response readData(@RequestParam("param") String param) { 
    ... 
} 

如果尚未清除輸入JSON是:

{ 
    "param":"some value" 
} 

回答

0

類型的輸入JSON是Map<String, String>,所以如果你想有無差異的輸入,你可以使用它作爲你的請求st參數並讀取您需要的值。

請注意,@RequestParam看在請求參數,而不是身體,所以它是一個不同的野獸。

+0

有沒有辦法設置類似BodyParam?我認爲它更優雅,不必從地圖中獲取該字符串。 –

+0

通過編寫一個提供者來讀取主體並將其解析到一個Map中,然後服務於指定的值,您* *可以*。但是,如果你這樣做,那麼身體將無法獲得你的資源,所以我不會走這條路。就未來的擴展而言,使用「Map」會更安全。 – jgm

0

您可以通過讓新澤西做到這一點你擦肩而過String作爲是(按註釋),然後數據綁定它使用傑克遜ObjectMapper(事新澤西內部使用的JSON綁定):

Map<String,Object> map = objectMapper.readValue(param, Map.class); 

以訪問到ObjectMapper,你可以在資源類使用JAX-RS注射註釋(@Context我認爲?):

@Context 
private ObjectMapper objectMapper; 
相關問題