2017-01-25 3 views
0

Как Spring Boot noob, я просто знаю, что в классе контроллера его публичные функции могут возвращать оба объекта модели и объект ResponseEntity. Что-то вродеВ контроллере отдыха Spring (отмеченном с помощью @RestController) функции могут возвращать как объекты модели, так и объект ResponseEntity, что лучше?

public List<Book> getBooks() {} 

или

public ResponseEntity<Book> getBooks() {} 

Но мой вопрос, что лучше, когда есть несколько вариантов?

ответ

0

В принципе, вы контролируете статус ответа HTTP, если используете ResponseEntity, в дополнение к содержимому самого объекта.

public ResponseEntity<Object> getObject() { 
    return new ResponseEntity<Object>(object, Httpstatus.OK); 
} 

Например, если вам нужно проверить некоторые данные из запроса перед выполнением каких-либо действий, и вы хотите, чтобы ваш клиент знает, что произошло через код статуса HTTP вы можете выбирать между различными вариантами.

HttpStatus.CONFLICT 
HttpStatus.CREATED 

Здесь вы можете посмотреть на различные коды статуса:

HTTP Status Codes

+0

@Ibpeppers Так 'ResponseEntity < > 'более профессионально, не так ли :) – Rui

+0

@Rui Да, это более точный способ обработки ваших ответов. С помощью этих кодов статуса вы поможете своему клиенту понять, что произошло с запросом. – lbpeppers

+0

@Rui Например, если вы сделаете запрос POST для вашего API, пытающийся создать нового пользователя, если ваш ответ содержит код HTTP-статуса 201, будет легче понять, что произошло, если запрос был успешным или нет. – lbpeppers

0

Просто, чтобы пролить свет на то, что @lbpeppers упомянул. Использование ResponseEntity имеет много преимуществ.
1. Клиент не должен смотреть в тело сообщения, если код состояния - это что-то вроде 400 или 404, что весьма полезно
2. В некоторых случаях клиент не интересуется телом. Все это нуждается статус операции
3. Есть много удобных методов, таких как is1xxInformational, is2xxSuccessful, is3xxRedirection, is4xxClientError, is5xxServerError в HttpStatus Calss, который может быть использован как

response.getStatusCode().is2xxSuccessful() 
Смежные вопросы