Перейти на страницу надписи

#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 .