Перечисление в RestEasy @RestForm?

У меня есть служба JAX-RS, которая обрабатывает многочастные операции PUT с объектом запроса, сопоставленным с помощью аннотации @RestForm. Все параметры внутри @RestForm сериализованы/десериализованы правильно, и я могу видеть, как они попадают в мой метод конечной точки JAX-RS. Однако когда я добавил в форму свойство Enum, похоже, оно отображается неправильно. Когда я PUT отправляю запрос с этим Enum набором значений, моя конечная точка JAX-RS видит значение как null.

Моя форма довольно проста и выглядит примерно так:

public class MyEnumForm {

@RestForm("paramA")
private String paramA = null;

@RestForm("paramB")
private String paramB = null;

@RestForm("enumParam")
private MyEnumType enumParam = null;

...snip...

}

Мой метод конечной точки JAX-RS выглядит так...

@Path("/myendpoint")
@PUT
@Consumes({ MediaType.MULTIPART_FORM_DATA })
public Response testPut(@MultipartForm MyEnumForm) {

...snip...

}

Мне не хватает аннотации к enum в моем классе формы? Есть ли что-то особенное, что мне нужно сделать для типов enum в этом сценарии?

Какую версию RESTEasy вы используете?

James R. Perkins 27.05.2024 22:57

Я использую RestEasy, входящий в состав Quarkus 3.10. Похоже на RestEasy 6.2.7.

Shadowman 28.05.2024 01:07

Вы пробовали @BeanParam вместо @MultipartForm?

Serkan 28.05.2024 16:37

Я использую @ MultipartForm, потому что в рамках запроса PUT происходит загрузка файлов. Я попробовал изменить аннотацию @ MultipartForm на @ BeanParam, но результат тот же. Я изменил аннотацию @ RestForm в файле Enum на @ FormParam, но снова тот же результат.

Shadowman 28.05.2024 17:13

@Shadowman, вы также можете включить свои файлы в MyEnumForm с помощью @ RestForm(ALL) List<FileUpload>

Serkan 29.05.2024 10:33

@Серкан да, именно так я обрабатываю загрузку файлов. Я просто не показал это в примере кода, поскольку проблема связана с проблемой перечисления.

Shadowman 29.05.2024 13:59

@Shadowman, тогда просто сопоставь свое перечисление как строку. И создайте вспомогательный метод в своем перечислении для преобразования строки в перечисление.

Serkan 29.05.2024 14:59

@Серкан, я, конечно, могу это сделать. Я просто надеялся, что есть способ заставить Resteasy выполнять сопоставление, как это происходит с другими полями.

Shadowman 29.05.2024 21:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
8
117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема заключалась в том, что моему enum требовался общедоступный статический fromString(String) метод для преобразования предоставленного значения String в экземпляр Enum. Как только это было добавлено, RestEasy правильно его преобразовал.

Другие вопросы по теме