Добрый день.
Я конечно не могу претендовать по какой-либо глубины понимание адресации Views in Spring MVC.
Но когда я ничего не понял - я пошел в гугл, достал пример проекта от Spring , там всё работает. Поигрался с разными вариантами, которые подходят для моего случая - всё работает. Включаю у себя - то одно не так, то другое не так. Похоже на бесполезную трату времени, т.к. в данном случае я просто не понимаю, что происходит под капотом и почему.
В итоге потрачен 3 часа времени - и ничего не понятно :(
В целом вот спринг контроллер и спринг бут в одном классе :
package com.contacts;
import com.contacts.db.HibernateUtil;
import com.contacts.model.Contact;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
@Controller
@EnableAutoConfiguration
public class WebController {
@RequestMapping(value = "/contacts/edit", method=RequestMethod.GET)
public String editContact(@RequestParam(name = "id", required = false) Integer id, Model model) {
if (id == null)
id = 0;
Session session = HibernateUtil.getSessionFactory().openSession();
Query query = session.createQuery("from Contact where id = :contact_id");
query.setParameter("contact_id", id);
Contact contact = (Contact)query.uniqueResult();
if (contact == null)
contact = new Contact();
HibernateUtil.shutdown();
model.addAttribute("contact", contact);
return "edit";
}
@RequestMapping(value = "/contacts/edit", method=RequestMethod.POST)
public String editContact(@RequestParam(name = "id", required = false) Integer id, @ModelAttribute Contact contact, Model model) {
model.addAttribute("contact", contact);
return "result";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(WebController.class, args);
}
}
Когда я что-либо меняю в этом коде - я постоянно получаю то 404 (страница не найдена), то
Circular view path [edit]: would dispatch back to the current handler URL [/contacts/edit] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
Структура проекта:
Контент файлов HTML:
edit.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Getting Started: Handling Form Submission</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Form</h1>
<form action="#" th:action="@{/contacts/edit}" th:object="${contact}" method="post">
<p>First name: <input type="text" th:value="${contact.firstName}" th:field="*{firstName}" /></p>
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
</body>
</html>
result.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Getting Started: Handling Form Submission</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Result</h1>
<p th:text="'First name: ' + ${contact.firstName}" />
</body>
</html>