У меня есть служба 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, входящий в состав Quarkus 3.10. Похоже на RestEasy 6.2.7.
Вы пробовали @BeanParam вместо @MultipartForm?
Я использую @ MultipartForm, потому что в рамках запроса PUT происходит загрузка файлов. Я попробовал изменить аннотацию @ MultipartForm на @ BeanParam, но результат тот же. Я изменил аннотацию @ RestForm в файле Enum на @ FormParam, но снова тот же результат.
@Shadowman, вы также можете включить свои файлы в MyEnumForm с помощью @ RestForm(ALL) List<FileUpload>
@Серкан да, именно так я обрабатываю загрузку файлов. Я просто не показал это в примере кода, поскольку проблема связана с проблемой перечисления.
@Shadowman, тогда просто сопоставь свое перечисление как строку. И создайте вспомогательный метод в своем перечислении для преобразования строки в перечисление.
@Серкан, я, конечно, могу это сделать. Я просто надеялся, что есть способ заставить Resteasy выполнять сопоставление, как это происходит с другими полями.
Проблема заключалась в том, что моему enum
требовался общедоступный статический fromString(String)
метод для преобразования предоставленного значения String
в экземпляр Enum
. Как только это было добавлено, RestEasy правильно его преобразовал.
Какую версию RESTEasy вы используете?