/ / Spring Boot Rest Controller POST mehrere Datentypen auf eine Anfrage URL zugeordnet - Java, Feder, Rest, Jackson, Spring-Boot

Spring Boot Rest Controller POST mehrere Datentypen auf eine Anfrage URL zugeordnet - Java, Frühling, Rest, Jackson, Spring-Boot

Ich versuche, einen Endpunkt einzurichten, der entweder ein einzelnes Objekt oder eine Liste von Objekten des gleichen Typs akzeptiert.

Ich habe versucht, zwei Methoden mit den zwei Datentypen deklariert, aber Spring nicht so (der Server kann nicht gestartet werden)

@RequestMapping(
value = "",
method = RequestMethod.POST ,
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<Object> single(@RequestBody Something something){
return ResponseEntity.ok("ok");
}

@RequestMapping(
value = "",
method = RequestMethod.POST ,
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<Object> multiple(@RequestBody List<Something> somethingList){
return ResponseEntity.ok("ok");
}

Das nächste, was ich bekommen habe, ist ein Etwas zu akzeptieren und eine Methode zu deklarieren.

@RequestMapping(
value = "",
method = RequestMethod.POST ,
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<Object> somethingArray(@RequestBody Something... something){
return ResponseEntity.ok("ok");
}

Frage: Gibt es eine Möglichkeit, dies zu tun, ohne nur ein Objekt zu akzeptieren und die Deserialisierung manuell durchzuführen?

EDIT: Ich habe auch mehrere @RequestBody "s versucht, dh

@RequestMapping(
value = "",
method = RequestMethod.POST ,
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<Object> somethingArray(@RequestBody(required = false) Something something, @RequestBody(required = false) Something[] somethingArray){
return ResponseEntity.ok("ok");
}

Antworten:

0 für die Antwort № 1

Sie können eine Methode erstellen, die eine erhältZeichenfolge zum Beispiel. Dann müssen Sie einen String analysieren, zu einem Objekt marshalieren und abhängig vom Ergebnistyp eine private Methode aufrufen. Aber ich meine eine falsche Herangehensweise. Definieren Sie besser verschiedene Endpunkte für verschiedene Parameter.


0 für die Antwort № 2

Normalerweise mache ich dabei einen Pluralendpunkt.

Wenn ich einen Kunden hinzufüge, wäre der Endpunkt / Kunde, wenn es sich um eine Liste handelt, die ich mache / Kunden.

Soweit ich weiß, können Sie die Request-Methode nicht nach Parametertyp überladen.