RestEasy игнорирует метод @JsonCreator для перечисления

1

У меня возникают проблемы с тем, что RestEasy (3.0.10.Final) анализирует параметр пути в значение перечисления.

Имея определение перечисления...

package com.stines;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonValue;

public enum MyNumber {
    One("number-one"), Two("number-two");

    @JsonIgnore private final String text;

    @JsonIgnore
    private MyNumber(final String text) {
        this.text = text;
    }

    @JsonValue
    public String getText() {
        return text;
    }

    @JsonCreator
    public static MyNumber byText(final String text) {
        for (final MyNumber value : MyNumber.values()) {
            if (value.getText().equals(text)) return value;
        }
        throw new IllegalArgumentException("Unknown number");
    }
}

... и конечная точка...

@PUT
@Path("{number}")
void putNumber(
        @PathParam("number") MyNumber number
);

... Я ожидаю, что смогу нажать PUT http://my-server/number-one.

Я вижу следующее:

Caused by: java.lang.IllegalArgumentException: No enum constant com.stines.MyNumber.number-one
    at java.lang.Enum.valueOf(Enum.java:238)
    at com.stines.MyNumber.valueOf(MyNumber.java:7)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.jboss.resteasy.core.StringParameterInjector.extractValue(StringParameterInjector.java:343)
    ... 34 more

Что мне здесь не хватает? Большое спасибо.

  • 0
    Обратите внимание, что конструктор не соответствует имени класса в вашем коде. Можете ли вы показать больше трассировки стека исключений?
  • 0
    stackoverflow.com/questions/12639791/...
Показать ещё 1 комментарий
Теги:
enums
jackson
fasterxml
resteasy

1 ответ

4
Лучший ответ

Похоже, что проблема не связана с Джексоном, поскольку вы сопоставляете параметр пути, а не объект полезной нагрузки.

Согласно документации JAX-RS, у вас может быть статический метод valueOf или fromString для создания экземпляра параметра из строки. Я предлагаю вам переименовать byText метод к fromString и посмотреть, что происходит.

  • 0
    ЭТО СРАБОТАЛО!! \ o / Большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню