Сопоставьте JAX-RS @PathParam с конструктором POJO с аннотациями

Я хочу создать конечную точку, которая имеет PathParam это автоматически вызывает конструктор объекта для инъекции, который имеет конструктор аргумента String. Чтобы изложить это в коде:

Вот ресурс

@GET
@Path("/{apiVersion}" + "/item")
public Response version(@PathParam("apiVersion") APIVersion apiVersion) {
    return Response.ok().build();
}

Я хочу, чтобы строка автоматически использовалась при вызове конструктора APIVersion. в APIVersion учебный класс

public APIVersion(String apiVersion) {
   this.versionString = apiVersion;
}

Можно ли обойтись только доступом к аннотациям? У меня нет доступа к ResourceConfig,

1 ответ

Решение

Да, это возможно, без каких-либо аннотаций, кроме @PathParamТаким образом, приведенный вами пример должен работать как есть. См. https://jersey.github.io/documentation/latest/jaxrs-resources.html (выделено мной):

В общем случае тип Java параметра метода может:

  1. Быть примитивным типом;

  2. Иметь конструктор, который принимает один аргумент String;

  3. Иметь статический метод с именем valueOf или fromString, который принимает один аргумент String (см., Например, Integer.valueOf(String) и java.util.UUID.fromString(String));

  4. Иметь зарегистрированную реализацию SPI расширения JAX-RS javax.ws.rs.ext.ParamConverterProvider, которая возвращает экземпляр javax.ws.rs.ext.ParamConverter, способный к преобразованию типа "из строки" для типа. или же

  5. Be List, Set или SortedSet, где T удовлетворяет 2 или 3 выше. Полученная коллекция доступна только для чтения.

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