Почему перечисления не всегда работают при вызове через api rest? - PullRequest
1 голос
/ 17 марта 2020

У меня есть dto, использующее перечисление (назовем это Сравнением):

public enum Comparison {
    comparisonA, comparisonB, comparisonC, comparisonD
}

и

public class ComparisonDto {
    public Comparison operator;
    public Integer value;

    // with getter and setter
}

Это прекрасно работает при компиляции с моим компьютером, но у других разработчиков возникает проблема : используемое значение сравнения больше не распознается. json находится в следующей форме при вызове пути:

{
  "value" : 10,
  "operator" : "comparisonA"
}

Наиболее распространенная ошибка в этом случае - «нераспознанный тип данных». Например, API имеет следующую форму:

@Path("/path-to-call")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public interface ApiRs {

    @POST
    @Path("/")
    @Produces(MediaType.APPLICATION_JSON)
    ResponseStatus create(ComparisonDto comparisonDto);
}

Spring не используется.

1 Ответ

0 голосов
/ 17 марта 2020

Похоже, у вас простая опечатка, которая все портит. Я думаю, что это не поле сравнения, а поле значения, которое является неправильным.

Если отправляемый json действительно:

{
  "values" : 10,
  "operator" : "comparisonA"
}

Тогда это должно быть

{
  "value" : 10,
  "operator" : "comparisonA"
}

Удалите лишние s из "значений", и, надеюсь, тип данных должен быть распознан, и все снова будет работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...