2015-07-09 3 views
0

У меня есть пользовательский класс данных:трикотажа - использовать пользовательский класс в URI ресурса

public static class Data { 
    ... 
} 

Я хочу использовать этот класс в URI ресурса в Джерси. Например:

@Path("test") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public class ResourceTest { 
    @GET 
    @Path("/data-{data}") 
    public Response get(@PathParam("data") final Data data) { 
     ... 
    } 
} 

Возможно ли это? Думаю, мне нужно ввести какой-то конвертер, который преобразует текстовое представление Data в экземпляр Data. Я смотрел в документации, но пока не нашел полезного.

Ofcourse, я могу изменить это:

@Path("test") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public class ResourceTest { 
    @GET 
    @Path("/data-{data}") 
    public Response get(@PathParam("data") final String input) { 
     final Data data = convert(input); 
     ... 
    } 
} 

Но я предпочел бы сделать бы преобразование других/автомагически WRT. ресурс.

+0

Не знаете, зачем вам нужен класс для представления данных в GET? Обычно вас интересуют только '@ PathParam' или' @ QueryParam'. – Qwerky

+0

Меня все еще интересует '@ PathParam', как вы можете видеть в примере. Мне просто нужно преобразовать из текстового представления определенного класса в экземпляр фактического класса. Если возможно, я хотел бы иметь это преобразование вне реализации ресурсов. –

ответ

0

От docs:

Тип аннотированном параметра, поля или свойства должен:

  • ...
  • есть конструктор, который принимает один аргумент типа String.
  • Имейте статический метод с именем valueOf или fromString, который принимает единственный аргумент String (см., Например, Integer.valueOf (String)).
  • Имейте зарегистрированную реализацию SPI ParamConverterProvider JAX-RS, которая возвращает экземпляр ParamConverter, способный преобразовать «из строки» для типа.

Так что если вы предоставите конструктор Data(String), все должно быть хорошо.

+0

Интересно, я попробую. Я попробую третий вариант, так как некоторые параметры являются сторонними. Благодаря! –

Смежные вопросы