Сброс объекта в Spring Boot

Я использую Spring Boot с Kotlin и хочу вывести объект в браузер.

Entities.kt:

@Entity
class Person(
    var name: String,
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long? = null
)

@Entity
class Cat(
    var name: String,
    @ManyToOne var ownedBy: Person,
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long? = null
)

HtmlController.kt:

@Controller
class HtmlController(private val repository: CatRepository) {

    @GetMapping("/")
    fun index(model: Model): String {
        model["cats"] = repository.findAll()
        return "index"
    }
}

В моем шаблоне index я могу перебирать cat с помощью {#cats}{/cats}, но я хочу выгрузить все (например, чтобы увидеть, какие отношения доступны). Это возможно? Я попытался изменить контроллер выше на return respository.findAll().toString(), но это дает мне ошибку:

There was an unexpected error (type=Not Found, status=404).

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
0
231
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

При возврате String из ControllerSpring MVC предполагает, что вы указываете на файл представления. Поэтому он будет искать файл в какой-то настроенной папке, где имя файла является строковым представлением списка Cats. Этого, конечно же, не существует, и вы получаете 404.

Самый простой способ сделать это — создать конечную точку в стиле REST и вернуть данные в подходящем формате данных, например json. Мой пример с Java, но вы можете преобразовать его в Kotlin:

@RestController
public class CatRestController {

    @Autowired
    private CatRepository repository;

    @RequestMapping(path = "/cats", method = RequestMethod.GET)
    public List<Cat> getAllCats() {
        return repository.findAll();
    }
}

Spring Boot должен автоматически преобразовать список в json. Этот метод может работать, если его переместить на существующий контроллер Spring MVC, но я не проверял. У меня есть пример из обычного проекта Spring MVC (не Spring Boot), и сигнатура метода выглядит примерно так:

@RequestMapping("/cats.json")
public @ResponseBody List<Cat> getCats() {

Еще один совет: используйте плагин для браузера, который преобразует json в красиво напечатанный json :)

Tobb 17.06.2019 16:14

Другие вопросы по теме