#spring #spring-boot #spring-data-jpa
Вопрос:
@RestController
public class TestController {
@GetMapping(path = "/demo")
public ResponseEntity<?> test() {
User user = new User();
user.setAge("12");
HttpHeaders responseHeaders = new HttpHeaders();
return new ResponseEntity<>(user, responseHeaders, HttpStatus.OK);
}
}
Я заглядываю в некоторые документы и нахожу, что некоторые люди напишут, как показано ниже:
rResponseEntity.ok().headers(responseHeaders).body(user);
В чем разница между new ResponseEntity<>(user, responseHeaders, HttpStatus.OK);
и ResponseEntity.ok().headers(responseHeaders).body(user);
? Какой путь предпочтительнее? Спасибо.
Комментарии:
1. Там нет рекомендуемого подхода, АФАИК, используйте тот, который вы предпочитаете. Второй вариант через конструктор, возможно, легче читать, но это вопрос предпочтений.
2. Почему мы можем писать в
ResponseEntity.ok().headers(responseHeaders).body(user);
? Есть ли здесь какая-то логическая поддержка?3. Нет, это просто следует шаблону строителя с
.body(user)
последующим вызовомnew ResponseEntity<>(...)
.4. Я предпочитаю, чтобы метод возвращал тип напрямую (
User
в вашем примере) и использовал исключения (напримерResponseStatusException
), если что-то пойдет не так. Но, как уже сказал @sp00m, на самом деле это дело вкуса.5. @slauth Как мне изменить код, если я использую исключения? Спасибо.
Ответ №1:
Я показываю небольшой пример, возвращающий User
напрямую, потому что ИМХО это приводит к более чистым подписям:
@RestController
public class TestController {
@GetMapping(path = "/demo")
public User test() {
if (userDoesNotExist()) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
}
User user = new User();
user.setAge("12");
return user;
}
}