2017-02-14 34 views
0

у меня есть пружинный веб-приложение 4.3.4 с REST конечной точки:пружины для дополнительных многозначных параметров

@RequestMapping(value = "/doStuff", method = RequestMethod.GET) 
public ResponseEntity<MyDTO[]> findSomething(@RequestParam(value = "status") 
    Optional<Set<EnumStatus>> statusFilter) 
{ 
    [...]; 
} 

Я называю это так: http://localhost:8080/rest/api/doStuff?status=CREATED&status=ACTIVATED

Я ожидал, что значение StatusFilter быть:

Optional { Set {EnumStatus.CREATED, EnumStatus.ACTIVATED}} 

Вместо этого я получил:

Optional { Set {EnumStatus.CREATED}} 

Выключается Весна использует ArrayToObjectConverter, уменьшая два значения до одного.

Есть ли способ обойти это? Является ли это ошибкой или ожидаемым поведением?

+0

http://stackoverflow.com/questions/2602043/rest-api-best-practice -how-to-accept-list-of-parameter-values-as-input – blank

+0

Попробуйте удалить «Необязательно» и оставьте только «Set » и установите 'required = false' в' @ RequestParam' вместо использования ' Optional'. (Вы также можете попробовать новую версию 4.3.x, так как 4.3.6 является самой последней). Если посмотреть на код для 4.3.4 (и 5.0.0.M4), там может быть небольшая ошибка, которая рассматривается в более новых версиях. –

+0

Да, это то, что я сделал, и он работает, но он чувствует себя грязным, потому что все остальное является нулевым с опцией. Поэтому «его ошибка» - это ответ, который я искал в этом случае, спасибо! Отправьте его, и я отметю его как принято. –

ответ

0
status=CREATED&status=ACTIVATED 

Как статус может быть равен двум различным значениям? Как о смене URL в

status=["CREATED", "ACTIVATED"] 

Я не ясно, как весна будет из коробки преобразовать это

+0

Это совершенно стандартное поведение HTTP, параметр может быть многозначным. Объявление параметра как Set работает должным образом. –

+0

Вы должны использовать редактор свойств или HandlerMethodArgumentResolver – mirmdasif