es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Formulario HTML Spring Thymeleaf + Operaciones CRUD

Soy nuevo en Spring Framework y actualmente intento desarrollar una aplicación sencilla en la que los propietarios de restaurantes puedan agregar un plato a una base de datos principal a través de inicio de sesión e ingresando los datos del plato en un formulario HTML (con Thymeleaf). (nombre del plato, precio, sin gluten = verdadero, etc.)

Los usuarios de la aplicación deberían poder buscar en la base de datos principal según su ubicación y requisitos dietéticos, entre otros.

Estoy tratando de aprender a través de tutoriales de YouTube, sin embargo, todos parecen usar @RestController y @RequestBody y utilizar Postman para enviar solicitudes JSON. Tengo dificultades para adaptarlo a mi formulario HTML.

He utilizado la anotación @controller para métodos simples de ‘guardar’, pero cuando investigo ‘cómo incluir una clave foránea en los datos agregados a la base de datos’, (es decir, incluir ‘id de restaurante’ como clave foránea en la clase ‘plato’), todos los tutoriales usan @RequestController y solicitudes JSON en Postman.

Como intento construir una aplicación utilizable, enviar solicitudes en Postman no parece ser una buena solución.

Creo que el problema según otros mensajes es el siguiente:

“Si usas el motor de plantillas como Thymeleaf no funcionará con @RestController debido a @ResponseBody que se incluye en esta anotación” – Sonique

“@ResponseBody convierte los objetos devueltos en algo que podría estar en el cuerpo, por ejemplo, JSON o XML” – Martin Thoma

He intentado quitar @RequestBody y cambiarlo a @RequestParam, pero obtengo errores.

¿Existen soluciones alternativas para mi problema? Por ejemplo, ¿usar un formato de archivo diferente para el formulario ‘agregar nuevo plato’ o no usar Thymeleaf?

¡Cualquier ayuda o consejo sería muy apreciado!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para agregar datos a la base de datos con Spring Framework

    Si eres nuevo en Spring Framework y estás intentando desarrollar una aplicación simple donde los dueños de restaurantes puedan agregar un plato a una base de datos principal a través de un inicio de sesión e ingresando los datos del plato en un formulario HTML (con Thymeleaf), y deseas usar @ Controller en lugar de @ RestController, entonces esta solución podría ayudarte.

    1. Crea un formulario en HTML con los campos de entrada necesarios para agregar un nuevo plato. Por ejemplo:
    <form method="post" action="/add-dish">
        <label for="name">Nombre:</label>
        <input type="text" name="name" id="name" required="">
        <br>
        <label for="price">Precio:</label>
        <input type="number" name="price" id="price" required="">
        <br>
        <label for="gluten-free">Sin gluten:</label>
        <input type="checkbox" name="gluten-free" id="gluten-free">
        <br>
        <button type="submit">Agregar plato</button>
    </form>
    
    1. En tu clase controladora, crea un método de manejador que se mapee en la URL “/add-dish” con el método “POST”. Este método debe tomar los parámetros del formulario HTML y usarlos para guardar un nuevo plato en la base de datos. Por ejemplo:

    “`
    @Controller
    public class DishController {

        @Autowired
        private DishRepository dishRepository;

        @PostMapping(“/add-dish”)
        public String addDish (@RequestParam (“name”) String name,
                  @RequestParam (“price”) double price,
                  @RequestParam (value = “gluten-free”, required = false) boolean glutenFree,
                  Principal principal) {

            Dish dish = new Dish ();
            dish.setName (name);
            dish.setPrice (price);
            dish.setGlutenFree (glutenFree);
            dish.setRestaurant (principal.getName ()); // suponiendo que el usuario conectado es el dueño del restaurante
            dishRepository.save (dish);

            return “redirect:/”;
        }
    }

    1. En este ejemplo, estamos usando @RequestParam en lugar de @RequestBody para recuperar los parámetros del formulario HTML. También es posible usar @ModelAttribute para vincular los datos del formulario a un objeto Java. Sin embargo, esto podría complicarse al tratar con claves foráneas, como mencionaste.
    2. Para incluir una clave foránea en los datos agregados a la base de datos, puedes agregar el valor de la clave foránea como propiedad del objeto que se está guardando. En este ejemplo, estamos estableciendo el nombre del restaurante como el valor de la clave foránea.

    3. Finalmente, para buscar en la base de datos principal según la ubicación y los requisitos dietéticos, puedes agregar otro método de controlador en la clase controladora que recupere los datos apropiados de la base de datos y los devuelva a la vista HTML usando atributos de modelo. La vista HTML puede mostrar los datos en el formato deseado.

    En conclusión, es posible agregar datos a la base de datos usando Spring Framework sin usar @RestController y @RequestBody. Al usar @Controller y @RequestParam, puedes recuperar datos de formulario de HTML y guardarlos en la base de datos. También puedes incluir valores de clave foránea como propiedades de objetos, y recuperar y mostrar datos en el formato deseado.

Comments are closed.