ResponseEntity<> должен вернуть несколько объектов. Как это осуществить?
Необходимо вернуть детали по id продукта и их количество. Прошу оценить код.
@RestController
@RequestMapping("/api/v1/details")
public class DetailRestControllerV1 {
private final DetailService detailService;
public DetailRestControllerV1(DetailService detailService) {
this.detailService = detailService;
}
@GetMapping("/byproduct/{id}")
public ResponseEntity<DetailsAndDetailsCountContainer> getDetailsByProduct(@PathVariable("id") Long productId) {
if (productId == null) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
List<Detail> details = detailService.findDetailsByProductId(productId);
if (details.isEmpty()) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
int countDetails = details.size();
DetailsAndDetailsCountContainer container = new DetailsAndDetailsCountContainer();
container.setDetails(details);
container.setCountDetails(countDetails);
return new ResponseEntity<>(container, HttpStatus.OK);
}
}
Сам объект
@Data
public class DetailsAndDetailsCountContainer {
private List<Detail> details;
private int countDetails;
}
Насколько правильное это решение и есть ли альтернативы?
Ответы (1 шт):
Автор решения: Alexander Pavlov
→ Ссылка
Если на другой стороне полноценный JSON парсер (Java, JavaScript, TypeScript...), то можно возвращать ResponseEntity<List<Detail>>, список на той стороне десериализуется в список или массив, в зависимости от языка, а у него будет длина.
Альтернатива
public class DataList<T> {
private List<T> items;
private int count;
DataList(List<T> items) {
this.items = items;
this.count = items.size();
}
}
ResponseEntity<DataList<Detail>> getDetailsByProduct(...) {
...
return new ResponseEntity<>(new DataList(details), HttpStatus.OK);
}