Сбрасывание сущности в Spring Boot - PullRequest
0 голосов
/ 17 июня 2019

Я использую 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 s с {#cats}{/cats}, но я хочу выкинуть весь лот (например, чтобы увидеть, какие отношения доступны). Это возможно? Я попытался изменить вышеприведенный контроллер на return respository.findAll().toString(), но это выдает ошибку:

Произошла непредвиденная ошибка (тип = Не найдено, статус = 404).

1 Ответ

1 голос
/ 17 июня 2019

При возврате String из Controller, Spring MVC будет предполагать, что вы указываете на файл вида. Таким образом, он будет искать файл в некоторой настроенной папке, где имя файла является строковым представлением списка Cat s. Этого, конечно, не существует, и вы получите 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() {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...