#java #spring #post #thymeleaf
#java #весна #Публикация #thymeleaf
Вопрос:
у меня проблема с загрузкой страницы по идентификатору. Весной я создаю простой форум, и когда я создал тему, у меня появилась страница, подобная этой /topic/10 (10 — тема с идентификатором), и затем я хочу добавить надпись в эту тему, поэтому после нажатия кнопки отправки должно быть /надпись / тема /10 (10 — тема с идентификатором). Теперь проблема, когда я нажимаю кнопку, я получаю ошибку 405, но когда я беру эту строку и пишу вручную или копирую адрес и вставляю его снова, тогда я получаю страницу с надписью. В чем проблема? Это может быть запрос thymeleaf или spring? Код приведен ниже
@Controller
@RequestMapping("/inscription/")
public class InscriptionController {
private InscriptionService inscriptionService;
private TopicService topicService;
@Autowired
private InscriptionController(InscriptionService inscriptionService, TopicService topicService) {
this.inscriptionService = inscriptionService;
this.topicService = topicService;
}
@GetMapping("topic/{id}")
public String in2(@ModelAttribute("inscription") Inscription inscription, @PathVariable Long id, Model model) {
Topic topic = topicService.findOne(id);
model.addAttribute("inscription", inscription);
return "inscription";
}
Thymeleaf — здесь, когда я нажимаю кнопку, новое сообщение должно перейти к надписи / теме / идентификатору
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Create new topic</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
</head>
<body>
<nav class="navbar navbar-light" style="background-color: #969bd9;">
<span class="navbar-brand">Create new topic</span>
</nav>
<div class = "container">
<div class = "row">
<div class = "col-md6 col-md-offset-3">
<form th:action="@{/inscription/topic/{id}(id = ${topic.id})}" th:object="${inscription}" method="post">
<h5>
<a th:href="@{/topic/{id}(id = topic.id)}"></a>
<span th:text="${topic.title}"></span>
</h5>
<div class="col s10">
<div class="row">
<div class="col s11">
Stworzony
<p th:text="${topic.createdAt} ? ${#calendars.format(topic.createdAt, 'HH:mm dd MMMM yyyy')}"></p>
<p th:utext="${#strings.replace(topic.text,T(java.lang.System).getProperty('line.separator'),'amp;<br /amp;>')}"></p>
<div class="divider"></div>
</div>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-success">New message</button>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
Ответ №1:
ошибка 405 означает «Метод не разрешен«. Когда вы нажмете submit
кнопку, ваш form
будет выполнять POST
метод, который не имеет соответствующего сопоставления в вашем контроллере. Вы должны добавить POST
сопоставление своему контроллеру или изменить form
метод на GET
.