@RequestMapping(
     value = {"/delete-producto-{descripcion}"},
     method = RequestMethod.GET)
 public String delete(@PathVariable String descripcion) {
   productoService.deleteProductoByDescripcion(descripcion);
   return "redirect:/list";
 }
  /** This method will list all existing productos. */
  @RequestMapping(
      value = {"/", "/list"},
      method = RequestMethod.GET)
  public String listProductos(ModelMap model) {

    List<Producto> productos = productoService.findAllProductos();
    model.addAttribute("productos", productos);
    return "productoslist";
  }
 /** This method will provide the medium to update an existing Producto. */
 @RequestMapping(
     value = {"/edit-producto-{descripcion}"},
     method = RequestMethod.GET)
 public String editProducto(@PathVariable String descripcion, ModelMap model) {
   Producto producto = productoService.findByDescripcion(descripcion);
   model.addAttribute("producto", producto);
   model.addAttribute("edit", true);
   return "registration";
 }
  /**
   * This method will be called on form submission, handling POST request for saving in database. It
   * also validates the input
   */
  @RequestMapping(
      value = {"/newProducto"},
      method = RequestMethod.POST)
  public String saveProducto(@Valid Producto producto, BindingResult result, ModelMap model) {

    if (result.hasErrors()) {
      return "registration";
    }

    /*
     * Preferred way to achieve uniqueness of field [sso] should be implementing custom @Unique annotation
     * and applying it on field [sso] of Model class [Producto].
     *
     * Below mentioned peace of code [if block] is to demonstrate that you can fill custom errors outside the validation
     * framework as well while still using internationalized messages.
     *
     */
    if (!productoService.isProductoDescripcionUnique(producto.getId(), producto.getDescripcion())) {
      FieldError descripcionError =
          new FieldError(
              "producto",
              "descripcion",
              messageSource.getMessage(
                  "non.unique.descripcion",
                  new String[] {producto.getDescripcion()},
                  Locale.getDefault()));
      result.addError(descripcionError);
      return "registration";
    }

    productoService.saveProducto(producto);

    model.addAttribute(
        "success", "Producto " + producto.getDescripcion() + " registered successfully");
    // return "success";
    return "registrationsuccess";
  }
  /**
   * This method will be called on form submission, handling POST request for updating in database.
   * It also validates the input
   */
  @RequestMapping(
      value = {"/edit-producto-{descripcion}"},
      method = RequestMethod.POST)
  public String updateProducto(
      @Valid Producto producto,
      BindingResult result,
      ModelMap model,
      @PathVariable String descripcion) {

    if (result.hasErrors()) {
      return "registration";
    }

    productoService.updateProducto(producto);

    model.addAttribute(
        "success", "Producto " + producto.getDescripcion() + " updated successfully");
    return "registrationsuccess";
  }