2013-06-19 2 views
4

Я начал работать с RestEasy, и у меня возникла проблема, на которую я не могу найти ответа. Если у меня есть два метода, которые разрешают один и тот же путь (в этом случае/path1/path2/path3), но оба они имеют различное количество параметров запроса, сможет ли RestEasy определить, какой метод использовать?Может ли RestEasy выбрать метод на основе параметров запроса?

@GET 
@NoCache 
@Produces({ 
    MediaType.APPLICATION_JSON 
}) 
@Path("/path1/path2/{path3}") 
public String getResults1(
     @PathParam("path3") String path3, 
     @QueryParam("query1") @DefaultValue("") String query1, 
     @QueryParam("query2") String query2, 
     @QueryParam("query3") @DefaultValue("25") int query3) { 
    ... 
} 

@GET 
@NoCache 
@Produces({ 
    MediaType.APPLICATION_JSON 
}) 
@Path("/path1/path2/{path3}") 
public String getResults2(
     @PathParam("path3") String path3, 
     @QueryParam("query1") @DefaultValue("") String query1, 
     @QueryParam("query2") @DefaultValue("5") Integer query2) { 
    ... 
} 

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

Это что-то, что нужно обработать, или я должен просто сосать его и поместить в один метод и сделать проверку самостоятельно?

+2

Мне нравится получать голоса без объяснений. – Shaded

+0

Не знаете, почему вы занижены. +1 за хороший вопрос, который я видел раньше. – gregwhitaker

ответ

2

Нет, вы должны обращаться с этим методом. Если найдены конфликтующие ресурсы, это независимая реализация, какой метод будет согласован.

Взгляните на ваш пример еще раз:

Если вы подали Query1 и Query2 как бы это знать, если вы хотите метод с 2 параметрами запроса или метод с 3-мя параметрами запроса, и вы хотели, чтобы он по умолчанию значение 3-го по умолчанию?

+0

Hm .. просто мне кажется, что если бы он соответствовал имени параметра запроса, он мог бы сделать разумное решение. Так же, как перегрузка Java, если у меня есть метод с 2 строковыми параметрами и метод с 3 строковыми параметрами, которые называются одинаковыми при вызове с 2 строками, он не должен использовать по умолчанию метод параметров 3 с нулевым значением в качестве третьего. – Shaded

+1

@Shaded - взгляните на query2. Как узнать, является ли параметр целым числом или строкой? Он может попытаться разобрать int, но что вы будете делать, если он не разобратся? Является ли это строковым аргументом, или это недопустимый целочисленный аргумент? – gregwhitaker

+0

Вы сталкиваетесь с одной и той же проблемой с одним методом, хотя, если вы попытаетесь передать 'query2 = x' в url, и вы сопоставьте query2 с int, у вас возникнут проблемы. Я смотрю на него больше, как будто resteasy смотрит на параметры и имеет аннотации, которые он мог бы сделать, чтобы проверить, имеет ли он все параметры для метода и использует наивысшее соответствие. Я думаю, что у весны есть что-то вроде этого встроенного. Если я найду это, я свяжу его. – Shaded

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