【问题标题】:What is the correct way of return a List in SpringSpring中返回List的正确方法是什么
【发布时间】:2018-11-23 06:49:55
【问题描述】:

我写了一个用 Spring 注释的方法。它将返回一个列表。以下代码片段将代表该方法。

   @RequestMapping(path = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity<ReservationResponse> getAvailableRooms(
            @RequestParam(name = "checkin")
            @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
            LocalDate checkin,
            @RequestParam(name = "checkout")
            @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
            LocalDate checkout) {

        return new ResponseEntity<>(new ReservationResponse(), HttpStatus.OK);
    }

我想知道的是,如果我这样写会不会错?

@RequestMapping(path = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<ReservationResponse> getAvailableRooms(
        @RequestParam(name = "checkin")
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
        LocalDate checkin,
        @RequestParam(name = "checkout")
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
        LocalDate checkout) {
        ResponseEntity<ReservationResponse> reservationResponse = new ResponseEntity<ReservationResponse>();
    return (reservationResponse, HttpStatus.OK);
    }

【问题讨论】:

  • 我没有看到任何列表。第二个肯定是错误的,因为那会变成一个没有响应的ResponseEntity(即它是空的)。第一个也很可疑,因为您创建了一个可能什么都没有的新响应对象。
  • 是的。我没有在这里创建任何列表。我想知道返回方式是否可以。添加列表应该是他们的肯定。

标签: java spring list data-structures


【解决方案1】:

我认为您的 ReservationResponse 包含这样的列表:

class ReservationResponse{
List<Rooms> availableRooms;
}

如果是这样,那么您可以直接返回 ReservationResponse,无需添加任何内容。

@RequestMapping(path = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public ReservationResponse getAvailableRooms(
        @RequestParam(name = "checkin")
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
        LocalDate checkin,
        @RequestParam(name = "checkout")
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
        LocalDate checkout) {
        ReservationResponse> reservationResponse = new ReservationResponse();
        List<Rooms> rooms = yourService.getAvailableRooms(checkIn,checkOut);
        reservationResponse.setAvailableRooms(rooms);
    return reservationResponse;
    }

或者您可以像这样简单地返回房间

@RequestMapping(path = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public List<Rooms> getAvailableRooms(
        @RequestParam(name = "checkin")
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
        LocalDate checkin,
        @RequestParam(name = "checkout")
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
        LocalDate checkout) {

        List<Rooms> rooms = yourService.getAvailableRooms(checkIn,checkOut);

    return rooms;
    }

【讨论】:

  • 实际上 ReservationResponse 是一个包含私有字段集和 getter 和 setter 的实体。
  • 因此您可以通过调整服务数据来使用第一个。
  • 是的,这里没有定义 yourService
猜你喜欢
  • 1970-01-01
  • 2016-11-05
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多