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 № 1Moż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.