是否可以使用Jersey接收表单参数作为字节数组?
我尝试了以下内容:
@Path("/someMethod")
@POST
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String someMethod(@FormParam("someParam") byte[] someParam)
{
return "";
}
但得到了这个错误:
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,一切正常。
我需要以byte []而不是String的形式接收数据的原因是因为数据可能使用不同的字符集进行编码。这取决于提交数据的HTML文档,我需要在服务器端正确解码数据(编码字符集在单独的参数中提交)。
所以,如果我能以byte []的形式接收数据,它将解决我的问题。我们也欢迎任何其他解决方案。
谢谢!
答案 0 :(得分:2)
如果Jersey符合JAX-RS规范,那么参数可能是
- 原始类型
- 拥有一个接受单个String参数的构造函数
- 有一个名为valueOf的静态方法,它接受一个String参数 (例如,见 Integer.valueOf(字符串))
- List,Set或SortedSet,其中T满足上面的2或3。该 结果集合是只读的。
醇>
因为它实际上是在the Jersey API中定义的。
如果您想最好地使用@FormParam,您可以定义一个ByteArray
类来处理由String转换引起的错误并将其用作参数类型。
答案 1 :(得分:1)
感谢您的回答!我终于找到了解决方案...... 现在我看到了一个解决方案,我明白我没有很好地描述我的问题,它会引导你走向另一个方向......
问题是我从使用不同编码的许多不同页面向服务器提交表单数据。 当页面使用utf-8编码时,一切正常,但当页面使用不同的编码时,特殊字符就会丢失。
解决方案是将accept-charset="utf-8"
添加到< FORM> html元素,导致浏览器始终将表单数据编码为utf-8编码,解决了服务器端的编码问题。
谢谢!