Java-Джерси: получить параметр формы в виде байтового массива - PullRequest
6 голосов
/ 08 июня 2011

Можно ли получить параметр формы в виде байтового массива с Джерси?

Я попробовал следующее:

@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.

Если я изменю байт [] на строку, все будет работать правильно.

Причина, по которой мне нужно получать данные в виде байта [], а не в виде строки, заключается в том, что данные могут кодироваться с использованием разных кодировок. Это зависит от документа HTML, который представляет данные, и мне нужно правильно декодировать данные на стороне сервера (кодировка кодировки передается в отдельном параметре).

Итак, если я смогу получить данные в виде байта [], это решит мою проблему. Любые другие решения также приветствуются.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Если Джерси соответствует спецификации JAX-RS, тогда параметром может быть

  1. Тип примитива
  2. Имеет конструктор, который принимает один аргумент String
  3. Имейте статический метод с именем valueOf, который принимает один аргумент String (см., Например, Integer.valueOf (String))
  4. List, Set или SortedSet, где T удовлетворяет 2 или 3 выше.Полученная коллекция доступна только для чтения.

, как она определена в API Джерси .

Если вы хотите использовать @FormParam, вы можете определить класс ByteArray, который обрабатывает ошибки, вызванные преобразованием String, и использует его в качестве типа параметра.

1 голос
/ 09 июня 2011

Спасибо за ваши ответы! Я наконец нашел решение ... Теперь, когда я вижу решение, я понимаю, что недостаточно описал свою проблему, и это привело вас в другом направлении ...

Проблема заключалась в том, что я отправлял данные формы на сервер со многих разных страниц, которые используют разные кодировки. Когда страница использует кодировку utf-8, все работает правильно, но когда страница использует другую кодировку, специальные символы теряются.

Решением было добавить accept-charset="utf-8" к элементу html, что заставляло браузер всегда кодировать данные формы в кодировку utf-8, что решало проблему кодирования на стороне сервера.

Спасибо!

...