Spring Thymeleaf - отправить в ResponseEntity? - PullRequest
0 голосов
/ 01 августа 2020

Был здесь весь день. Возможно, мне где-то не хватает аннотации. Я также не могу заставить это приложение обслуживать индекс. html.

Что мне здесь не хватает? Основная проблема заключается в невозможности получить форму для отправки чего-либо на бэкэнд. Правильный ли атрибут ModelAttribute?

Заранее спасибо.

Контроллер:

package com.lms.application.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.lms.application.entity.Course;
import com.lms.application.service.CourseService;

@RestController
@RequestMapping("/courses")
public class CourseController {
    
        
    
        @Autowired
        private CourseService service;
        
        @RequestMapping(method=RequestMethod.GET)
        public ResponseEntity<Object> getCourses(){
            return new ResponseEntity<Object>(service.getCourses(), HttpStatus.OK);
        }
        
        @RequestMapping(value="/submit", method=RequestMethod.POST)     
        public ResponseEntity<Object> createCourse(@ModelAttribute("course") Course course){
            return new ResponseEntity<Object>(service.createCourse(course), HttpStatus.CREATED);
        }

Форма

                <div class="container">
                    <form method="post" th:object="${course}" th:action="@{/courses/submit}">
                        <div class="row mb-3">
                            <label for="title" class="col-sm-2 col-form-label">Course Title</label>
                            <div class="col-sm-10">
                                <input type="text" class="form-control" id="course.title" th:field="${course.title}"></input>
                            </div>
                        </div>
                        <div class="row mb-3">
                            <label for="credit" class="col-sm-2 col-form-label">Course
                                Credits</label>
                            <div class="col-sm-10">
                                <input type="number" class="form-control" id="course.credits" th:field="${course.credits}"></input>
                            </div>
                        </div>
                        <button type="submit" class="btn btn-primary">Submit</button>
                    </form>
                    </div>

1 Ответ

1 голос
/ 01 августа 2020

Перед тем, как потребовать объект от Thymeleaf, вы должны создать и передать его туда. Thymeleaf не создаст для вас объект.

Вам нужно передать объект через Model в Контроллер следующим образом:

@ModelAttribute("course") 
public Course course() { 
  return new Course(); 
}

Вам необходимо убедиться, что у объекта Course есть геттеры, сеттеры и конструктор по умолчанию для Thymeleaf, чтобы правильно с ним работать.

...