是否有可能接收表單參數作爲與澤西的字節數組?Java Jersey:接收表單參數作爲字節數組
我試過如下:
@Path("/someMethod")
@POST
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String someMethod(@FormParam("someParam") byte[] someParam)
{
return "";
}
但得到這個錯誤:如果我改變字節[]爲String,一切正常
SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: Missing dependency for method public java.lang.String SomeClass.someMethod(byte[]) at parameter at index 0
SEVERE: Missing dependency for method public java.lang.String SomeClass.someMethod(byte[]) at parameter at index 0
SEVERE: Method, public java.lang.String SomeClass.someMethod(byte[]), annotated with POST of resource, class SomeClass, is not recognized as valid resource method.
。
我需要接收數據爲byte []而不是String的原因是因爲數據可能使用不同的字符集進行編碼。它取決於提交數據的HTML文檔,我需要在服務器端正確解碼數據(編碼字符集是在單獨的參數中提交的)。
所以,如果我可以接收數據爲byte [],它將解決我的問題。任何其他解決方案也是受歡迎的。
謝謝!
不會'MediaType.APPLICATION_FORM_URLENCODED'暗示它是%編碼的,所以你可以只使用一個字符串?我在這裏猜測,但如果它真的是原始字節,也許你應該添加@Consumes(MediaType.TEXT_PLAIN)或其他一些代表原始二進制數據的MIME類型。 – MatrixFrog 2011-06-08 17:18:58
是的,它是%編碼的,沒關係。我只是從HTML FORM發佈數據。 是的,我可以使用一個字符串,但是會發生的是,澤西不正確地創建包含特殊字符的字符串,因爲澤西需要知道字符集,並且我在一個單獨的參數中發佈字符集。 這就是爲什麼我想要以byte []形式獲取數據而不是以String形式獲取數據,所以我可以使用正確的字符集正確地創建String。 – 2011-06-08 18:43:43
好的,是的,我想我在第一次閱讀時就誤解了這個問題。也許你可以通過澤西島的來源挖掘,並找到它實際上%解碼並轉換爲一個字符串...我不知道澤西島是否在某個地方做出一些不正確的假設。另一種可能是將整個輸入作爲'byte []'來使用(只需放棄'@ FormParam'),然後自己解析它。 – MatrixFrog 2011-06-08 18:57:01