2017-02-14 4 views
0

ich eine Federsteg 4.3.4 App mit einem REST-Endpunkt haben:Federsteg Unterstützung für optionale Mehrwertparameter

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

ich es so nennen: http://localhost:8080/rest/api/doStuff?status=CREATED&status=ACTIVATED

erwartete ich den Wert statusFilter zu sein:

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

Stattdessen bekam ich:

Optional { Set {EnumStatus.CREATED}} 

Es stellt sich heraus, dass Spring den ArrayToObjectConverter verwendet und die beiden Werte auf einen einzigen Wert reduziert.

Gibt es einen Weg um dies? Ist das ein Fehler oder erwartetes Verhalten?

+0

aus der Box umwandeln würde dies http://stackoverflow.com/questions/2602043/rest-api-best-practice -how-accept-list-of-parameter-values-as-input – blank

+0

Versuchen Sie, 'Optional' zu entfernen und nur' Set ' zu belassen und setzen Sie 'required = false' auf' 'RequestParam' anstelle von' Optional'. (Sie können auch eine neuere 4.3.x-Version ausprobieren, da 4.3.6 die neueste ist). Betrachtet man den Code für 4.3.4 (und 5.0.0.M4), könnte ein kleiner Fehler drin sein, der in neueren Versionen behoben wird. –

+0

Ja, das ist was ich getan habe und es funktioniert, aber es fühlt sich schmutzig an, weil der ganze Rest mit Optional null-sicher ist. Also "es ist ein Fehler" ist die Antwort, die ich in diesem Fall suchte, danke! Posten Sie es und ich werde es als akzeptiert markieren. –

Antwort

0
status=CREATED&status=ACTIVATED 

Wie kann der Status zwei verschiedenen Werten entsprechen? Wie wäre Ihre URL zu

status=["CREATED", "ACTIVATED"] 

Ich bin mir nicht klar zu verändern, wie Feder

+0

Dieses perfekt standardmäßige HTTP-Verhalten, ein Parameter kann mehrwertig sein. Die Deklaration des Parameters als Set funktioniert wie erwartet. –

+0

Sie müssen den Eigenschaftseditor oder HandlerMethodArgumentResolver verwenden – mirmdasif