Как вернуть тип Integer для ResponseEntity <> и получить результат на странице API? - PullRequest
0 голосов
/ 09 апреля 2020

Я только начал работать над приложением с весенней загрузкой (Java) в MVC. В классе контроллера:

@GetMapping("/{id}/age")
public ResponseEntity<Integer> getStudentAge(@PathVariable Long id) {
    Integer age = studentService.retrieveAgeById(id);
    return new ResponseEntity<Integer>(age, HttpStatus.OK);
}

С простыми данными SQL, такими простыми: INSERT INTO student (id, name, age, gender) VALUES (1, 'Rio', 5, 'Male'); Когда я запускаю приложение и проверяю веб-страницу с путем: http://localhost: 8080 / 1 / age Я получаю ответ, в котором возраст НЕ печатается: Результат

Запрос, используемый в пакете репозитория:

@Query("select d.id, d.age from Student d where d.id=:id")
Integer findAgeById(Long id);

Также, запросы на имя студента, пол (Тип: Строка) выполнены успешно. Но запрос на возраст (Type: Integer) не дает аналогичных результатов.

1 Ответ

0 голосов
/ 09 апреля 2020

Адаптируйте ваш запрос SELECT к:

@Query("select d.age from Student d where d.id = :id")
Integer findAgeById(@Param("id") Long id);

Запрос в вашем вопросе сопоставит первое поле из вашего SELECT с типом вашего метода, как вы можете видеть, это ваш идентификатор студента.

Вы также можете указать @Param в объявлении метода, потому что согласно этому руководству :

Запрос с именованными параметрами легче читать и менее подвержен ошибкам в случае необходимости рефакторинга запроса.

Если вы хотите указать идентификатор и возраст, вы можете вернуть всю сущность Student и использовать ее. Другой вариант - использовать проекцию , но я действительно не верю, что ваш сценарий использования достаточно продвинут, чтобы извлечь из этого выгоду.

...