/ / Spring boot Rest Controller POST wiele typów danych mapowanych na jeden URL żądania - java, spring, rest, jackson, spring-boot

Spring boot Rest Controller POST wiele typów danych mapowanych na jeden adres URL żądania - java, spring, rest, jackson, spring-boot

Próbuję skonfigurować punkt końcowy, który może przyjąć jeden obiekt lub listę obiektów tego samego typu.

Próbowałem już mieć dwie metody zadeklarowane z dwoma typami danych, ale Spring nie pasuje do tego (nie uruchamia serwera)

@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");
}

Najbliższym osiągnięciem jest zaakceptowanie czegoś [] i zadeklarowanie jednej metody.

@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");
}

Pytanie: Czy istnieje sposób, aby to zrobić bez konieczności akceptowania obiektu i ręcznego deserializacji?

EDYCJA: Próbowałem również wielu @RequestBody "s, tj

@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");
}

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz utworzyć jedną metodę, która otrzymaŁańcuch na przykład. Następnie należy przeanalizować ciąg, przekazać go do obiektu i wywołać metodę prywatną, w zależności od typu wyniku. Ale mam na myśli złe podejście. Lepiej określaj różne punkty końcowe dla różnych parametrów.


0 dla odpowiedzi nr 2

Zwykle robię to w liczbie mnogiej.

Jeśli dodaję klienta, punktem końcowym będzie / klient, jeśli jest to lista, którą wykonuję / klienci.

Według mojej wiedzy nie można przeciążać metody żądania według typu parametru.