Request method 'POST' not supported but form method and controller method are the same

313 Views Asked by At

I'm having some Request method 'POST' not supported exception but I cannot find the origin of the problem.

My form code is the following:

                              <form:form class="form-material validate-form" modelAttribute="Usuario_form" action="${pageContext.request.contextPath}/FormActionUser" method="POST" id="userForm">
                                <c:if test="${!empty Usuario_form.id && Usuario_form.id != 0}">
                                  <div class="form-group form-primary form-static-label">
                                    <div class="wrap-input100">
                                      <form:input path="id" class="form-control input100" type="text" id="usuario_id" name="usuario_id" readonly="true"/>
                                      <span class="focus-input100"></span>
                                      <span class="form-bar"></span>
                                      <label class="float-label">Id del usuario</label>
                                    </div>
                                  </div><br>
                                </c:if>
                                <div class="form-group form-primary form-static-label">
                                  <div class="wrap-input100 validate-input" data-validate="Ingrese nombre del usuario">
                                    <form:input path="nombre" class="form-control input100" type="text" id="usuario_nombre" name="usuario_nombre" data-value="s-5-64" data-opt="false" maxlength="64" data-original-title="0/64 (de 5 a 64)" data-toggle="tooltip" data-min="5" data-max="64" onkeyup="CaracteresDisponibles(this.id); "/>
                                    <span class="focus-input100"></span>
                                    <span class="form-bar"></span>
                                    <label class="float-label">Nombre del usuario</label>
                                  </div>
                                </div><br>
                                <div class="form-group form-primary form-static-label">
                                  <div class="wrap-input100">
                                    <form:select path="perfil.id" class="form-control input100" id="usuario_id_perfil" name="usuario_id_perfil">
                                      <c:forEach items="${ListadoPerfiles}" var="Perfil">
                                        <form:option value="${Perfil.id}" selected="${Perfil.id == Usuario_form.perfil.id ? 'selected' : ''}"> ${Perfil.nombre}</form:option>
                                      </c:forEach>
                                    </form:select>
                                    <span class="focus-input100"></span>
                                    <span class="form-bar"></span>
                                    <label class="float-label">Perfil del usuario</label>
                                  </div>
                                </div><br>
                                <c:if test="${empty Usuario_form.id || Usuario_form.id == 0}">
                                  <div class="form-group form-primary form-static-label">
                                    <div class="wrap-input100 validate-input" data-validate="Ingrese usuario">
                                      <form:input path="usuario" class="form-control input100" type="text" id="usuario_usuario" name="usuario_usuario" data-value="s-5-32" data-opt="false" maxlength="32" data-original-title="0/32 (de 5 a 32)" data-toggle="tooltip" data-min="5" data-max="32" onkeyup="CaracteresDisponibles(this.id); "/>
                                      <span class="focus-input100"></span>
                                      <span class="form-bar"></span>
                                      <label class="float-label">Usuario</label>
                                    </div>
                                  </div><br>
                                </c:if>
                                <div class="form-group form-primary form-static-label">
                                  <div class="wrap-input100 validate-input" data-validate="Ingrese correo del usuario">
                                    <form:input path="correo" class="form-control input100" type="text" id="usuario_correo" name="usuario_correo" data-value="e-10-64" data-opt="true" maxlength="64" data-original-title="0/64 (de 10 a 64)" data-toggle="tooltip" data-min="10" data-max="64" onkeyup="CaracteresDisponibles(this.id); "/>
                                    <span class="focus-input100"></span>
                                    <span class="form-bar"></span>
                                    <label class="float-label">Correo del usuario</label>
                                  </div>
                                </div><br>
                                <div class="form-group form-primary form-static-label">
                                  <div class="wrap-input100 validate-input" data-validate="Ingrese teléfono del usuario">
                                    <form:input path="telefono" class="form-control input100" type="text" id="usuario_telefono" name="usuario_telefono" data-value="s-10-16" data-opt="true" maxlength="16" data-original-title="0/16 (de 10 a 16)" data-toggle="tooltip" data-min="10" data-max="16" onkeyup="CaracteresDisponibles(this.id); "/>
                                    <span class="focus-input100"></span>
                                    <span class="form-bar"></span>
                                    <label class="float-label">Teléfono del usuario</label>
                                  </div>
                                </div><br>
                                <div class="form-group form-primary form-static-label">
                                  <div class="wrap-input100 validate-input" data-validate="Ingrese Id de la Intranet en valor numérico">
                                    <form:input path="intranet_id" class="form-control input100" type="text" id="usuario_id_intranet" name="usuario_id_intranet" data-value="i-1-2147483647" data-opt="true" maxlength="10" data-original-title="(del 1 al 2,147,483,647)" data-toggle="tooltip" data-min="1" data-max="2147483647"/>
                                    <span class="focus-input100"></span>
                                    <span class="form-bar"></span>
                                    <label class="float-label">Id Intranet</label>
                                  </div>
                                </div><br>
                                <div class="form-group form-primary form-static-label">
                                  <div class="wrap-input100 validate-input" data-validate="Ingrese notaria de la Intranet en valor numérico">
                                    <form:input path="intranet_notaria" class="form-control input100" type="text" id="usuario_notaria_intranet" name="usuario_notaria_intranet" data-value="i-1-300" data-opt="true" maxlength="3" data-original-title="(del 1 al 300)" data-toggle="tooltip" data-min="1" data-max="300"/>
                                    <span class="focus-input100"></span>
                                    <span class="form-bar"></span>
                                    <label class="float-label">Notaría Intranet</label>
                                  </div>
                                </div><br>
                                <div class="btn-group " role="group" data-toggle="tooltip" data-placement="top" data-original-title="Acciones disponibles">
                                  <form:button class="btn btn-primary btn-sm waves-effect waves-light" type="submit" name="Cancelar">Cancelar</form:button>
                                  <c:if test="${!empty Usuario_form.id && Usuario_form.id != 0}">
                                    <form:button class="btn btn-primary btn-sm waves-effect waves-light" type="submit" name="Actualizar">Actualizar</form:button>
                                  </c:if>
                                  <c:if test="${empty Usuario_form.id || Usuario_form.id == 0}">
                                    <form:button class="btn btn-primary btn-sm waves-effect waves-light" type="submit" name="Crear">Crear</form:button>
                                  </c:if>
                                </div>
                              </form:form>

I'm just giving the "most" important part of the controller, so my controller code is the following:

package Controllers;

import Library.VariableValidation;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import Models.Usuario;
import Services.UsersProfileImage;
import SpringServices.PerfilServicio;
import SpringServices.UsuarioServicio;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.SessionAttributes;

@Controller
@ControllerAdvice
@SessionAttributes({"Usuario", "ImagenUsuario"})
public class UserController {

  private UsuarioServicio usuario_servicio;
  private PerfilServicio perfil_servicio;
    
  @Autowired(required=true)
  @Qualifier(value="UsuarioServicio")
  public void setUsuarioServicio(UsuarioServicio us) {
    this.usuario_servicio = us;
  }
  
  @Autowired(required=true)
    @Qualifier(value="PerfilServicio")
    public void setPerfilServicio(PerfilServicio ps) {
        this.perfil_servicio = ps;
    }
  
  @RequestMapping(value = "/ConsultaUsuarios", method = RequestMethod.GET)
  public ModelAndView ConsultaUsuarios(HttpServletRequest request, HttpServletResponse response) {
    ModelAndView mav;
    HttpSession session = request.getSession();
    UsersProfileImage profile_image;

    if(session.getAttribute("Usuario") != null) {
      mav = new ModelAndView("users");
      
      try{
        List<Usuario> usuarios = this.usuario_servicio.ListadoUsuarios();
          
        Map<Integer, String> img_usuarios = new HashMap<Integer, String>();
        for(int i = 0; i < usuarios.size(); i++) {
          if(usuarios.get(i).getImagen_perfil() != null) {
            profile_image = new UsersProfileImage();
            img_usuarios.put(usuarios.get(i).getId(), profile_image.Base64ImageRetrieve(usuarios.get(i).getImagen_perfil()));
          }
        }
        
        mav.addObject("ListadoUsuarios", usuarios);
        mav.addObject("ImagenesUsuarios", img_usuarios);
      } catch(Exception e) {
        return new ModelAndView("forward:/E_Login");
      }
      
    } else {
      mav = new ModelAndView("forward:/Login");
    }
    
    return mav;
  }
  
  @RequestMapping(value = "/ActualizarImagenPerfil", method = { RequestMethod.GET, RequestMethod.POST })
  public ModelAndView ActualizarImagenPerfil(HttpServletRequest request, HttpServletResponse response) {
    ModelAndView mav = null;
    HttpSession session = request.getSession();
    Usuario usuario = (Usuario) session.getAttribute("Usuario");
    Map<String, String> map = new HashMap<>();
    
    if(session.getAttribute("Usuario") != null) {
      if(request.getHeader("X-Requested-With") != null && request.getHeader("X-Requested-With").equals("XMLHttpRequest")) {
        map.put("redirect", "true");
        
        try{
          UsersProfileImage profile_image = new UsersProfileImage();
          profile_image.RemoveImage(usuario.getId() + ".");
          usuario.setImagen_perfil(profile_image.SaveImage(usuario.getId(), request.getParameter("imagebase64")));
          
          usuario_servicio.ActualizarFotoPerfil(usuario.getId(), usuario.getImagen_perfil());
          map.put("url", request.getContextPath() + "/R_MProfile/1");
        } catch(Exception e) {
          map.put("url", request.getContextPath() + "/E_Login");
        }
        
        try {
          ObjectMapper mapper = new ObjectMapper();
          response.setContentType("text/html; charset=UTF-8");
          response.getWriter().write(mapper.writeValueAsString(map));
          response.getWriter().flush();
        } catch (IOException ex) {
          Logger.getLogger(ProfileController.class.getName()).log(Level.SEVERE, null, ex);
        }
          
      } else {
        mav = new ModelAndView("forward:/R_MProfile");
      }

    } else {
      
      mav = new ModelAndView("forward:/Login");
    }

    return mav;
  }
  
  @RequestMapping(value = "/BorrarImagenPerfil", method = RequestMethod.GET)
  public ModelAndView BorrarImagenPerfil(HttpServletRequest request, HttpServletResponse response) {
    ModelAndView mav;
    HttpSession session = request.getSession();
    Usuario usuario = (Usuario) session.getAttribute("Usuario");

    if(session.getAttribute("Usuario") != null) {
      try{
          UsersProfileImage profile_image = new UsersProfileImage();
          profile_image.RemoveImage(usuario.getId() + ".");
          
          usuario_servicio.BorrarFotoPerfil(usuario.getId());
          mav = new ModelAndView("forward:/R_MProfile/2");
      } catch(Exception e) {
        mav = new ModelAndView("forward:/R_MProfile");
      }
      
    } else {
      mav = new ModelAndView("forward:/Login");
    }
    
    return mav;
  }
  
  @RequestMapping(value = "/BuscarMPerfil", method = { RequestMethod.GET, RequestMethod.POST })
  public ModelAndView BuscarMPerfil(HttpServletRequest request, HttpServletResponse response) {
    ModelAndView mav;
    HttpSession session = request.getSession();
    Usuario usuario;
    
    if(session.getAttribute("Usuario") != null) {
      mav = new ModelAndView("my_profile_edit");
      usuario = (Usuario) session.getAttribute("Usuario");
        
      try{
        mav.addObject("Usuario", this.usuario_servicio.BuscarUsuario(usuario.getId()));
        mav.addObject("ListadoPerfiles", this.perfil_servicio.ListadoPerfilesActivos());
            
      } catch(Exception e) {
        return new ModelAndView("forward:/E_Login");
      }
      
    } else {
      mav = new ModelAndView("forward:/Login");
    }

    return mav;
  }
  
  @RequestMapping(value = "/FormActionMyProfile", method = RequestMethod.POST, params = "Cancelar")
  public ModelAndView CancelarMiPerfil(HttpServletRequest request, HttpServletResponse response) {
    ModelAndView mav;
    HttpSession session = request.getSession();

    if(session.getAttribute("Usuario") != null) {
      mav = new ModelAndView("my_profile");

    } else {
      mav = new ModelAndView("forward:/Login");
    }
    
    return mav;
  }

  @RequestMapping(value = "/FormActionMyProfile", method = RequestMethod.POST, params = "Actualizar")
  public ModelAndView ActualizarMiPerfil(HttpServletRequest request, HttpServletResponse response,
  @ModelAttribute("Usuario") Usuario usuario) {
    ModelAndView mav;
    HttpSession session = request.getSession();
      
    if(session.getAttribute("Usuario") != null) {      
      mav = new ModelAndView("my_profile");
      
      try{
        if(usuario_servicio.ValidarUsuario(usuario)) {
          usuario_servicio.ActualizarMiPerfil(usuario);
          mav.addObject("Usuario", this.usuario_servicio.BuscarUsuario(usuario.getId()));
          mav.addObject("msg_result_action", "Perfil actualizado satisfactoriamente.");
        } else {
          usuario = (Usuario) session.getAttribute("Usuario");
          mav.addObject("Usuario", this.usuario_servicio.BuscarUsuario(usuario.getId()));
          mav.addObject("msg_error_action", "El usuario ingresado se encuentra en uso.");
        }
      } catch(Exception e) {
        System.out.println(e.getMessage());
        return new ModelAndView("forward:/E_Login");
      }
    } else {
      mav = new ModelAndView("forward:/Login");
    }
    
    return  mav;
  }
  
  @RequestMapping(value = "/ActualizarActivoUsuario/{id_usuario}/{activo}", method = RequestMethod.GET)
  public ModelAndView ActualizarActivoUsuario(@PathVariable("id_usuario") String id, @PathVariable("activo") String p_activo, HttpServletRequest request, HttpServletResponse response) {
    ModelAndView mav = null;
    HttpSession session = request.getSession();
    Usuario usuario = new Usuario();
    int id_usuario;
    int activo;
    List<Usuario> usuarios;
    Map<String, String> map = new HashMap<>();
    Map<Integer, String> img_usuarios = new HashMap<>();
    UsersProfileImage profile_image;
    
    if(session.getAttribute("Usuario") != null) {
      VariableValidation variableValidation = new VariableValidation();
      id_usuario = variableValidation.ValidateInt(id, false, 1, 2147483647);
      activo = variableValidation.ValidateInt(p_activo, false, 0, 1);
      
      if(id_usuario != -1 && activo != -1) {
        usuario.setId(id_usuario);
        usuario.setActivo(activo);
        map.put("usuarios_null", "");
        map.put("redirect", "false");
        map.put("reload", "false");
        
        try{
          usuario_servicio.ActualizarActivoUsuario(usuario);
          usuarios = this.usuario_servicio.ListadoUsuarios();
          
          if(usuarios == null) {
            map.put("usuarios_null", "No se han encontrado registros de usuarios en el sistema.");
          } else {
            for(int i = 0; i < usuarios.size(); i++) {
              if(usuarios.get(i).getImagen_perfil() != null) {
                profile_image = new UsersProfileImage();
                img_usuarios.put(usuarios.get(i).getId(), profile_image.Base64ImageRetrieve(usuarios.get(i).getImagen_perfil()));
              }
            }
          }
          
        } catch(Exception e) {
          map.put("redirect", "true");
          map.put("url", request.getContextPath() + "/E_Login");
          usuarios = null;
        }
        
        if(usuarios != null) {
          try{
              ObjectMapper mapper = new ObjectMapper();
              map.put("Usuarios", mapper.writeValueAsString(usuarios));
              map.put("ImagenesUsuarios", mapper.writeValueAsString(img_usuarios));
              map.put("msg_result_action", "Usuario actualizado satisfactoriamente.");
          } catch(Exception e) {
            map.put("reload", "true");
          }
          
        }
        
        if(request.getHeader("X-Requested-With") != null && request.getHeader("X-Requested-With").equals("XMLHttpRequest")) {
          try {
              ObjectMapper mapper = new ObjectMapper();
              response.setContentType("application/json; charset=UTF-8");
              response.getWriter().write(mapper.writeValueAsString(map));
              response.getWriter().flush();
          } catch (IOException ex) {
            Logger.getLogger(ProfileController.class.getName()).log(Level.SEVERE, null, ex);
          }
          
        } else {
          mav = new ModelAndView("forward:/R_Users");
        }
        
      } else {
        mav = new ModelAndView("forward:/R_Users");
      }
      
    } else {
      mav = new ModelAndView("forward:/Login");
    }

    return mav;
  }
  
  @RequestMapping(value = "/NuevoUsuario", method = RequestMethod.GET)
  public ModelAndView NuevoUsuario(HttpServletRequest request, HttpServletResponse response) {
    ModelAndView mav;
    HttpSession session = request.getSession();
      
    if(session.getAttribute("Usuario") != null) {
      mav = new ModelAndView("users_edit");
      mav.addObject("Usuario_form", new Usuario());
      mav.addObject("ListadoPerfiles", this.perfil_servicio.ListadoPerfilesActivos());
    } else {
      mav = new ModelAndView("forward:/Login");
    }

    return mav;
  }
  
  @RequestMapping(value = {"/BuscarUsuario/{id_usuario}", "/BuscarUsuario"}, method = RequestMethod.GET)
  public ModelAndView BuscarUsuario(@PathVariable("id_usuario") Optional<String> id, HttpServletRequest request, HttpServletResponse response) {
    ModelAndView mav;
    HttpSession session = request.getSession();
    int id_usuario;
    Usuario usuario;
    
    if(session.getAttribute("Usuario") != null) {
      mav = new ModelAndView("users_edit");
      
      if(id.isPresent()) {
        VariableValidation variableValidation = new VariableValidation();
        id_usuario = variableValidation.ValidateInt(id.get(), false, 1, 2147483647);
        
        if(id_usuario != -1) {
          try{
            usuario = this.usuario_servicio.BuscarUsuario(id_usuario);
            mav.addObject("ListadoPerfiles", this.perfil_servicio.ListadoPerfilesActivos());
            if(usuario != null) {
              mav.addObject("Usuario_form", usuario);
            } else {
              mav = new ModelAndView("forward:/R_Profiles");
            }
            
          } catch(Exception e) {
            return new ModelAndView("forward:/E_Login");
          }
          
        } else {
          mav = new ModelAndView("forward:/R_Profiles");
        }
        
      }
      
    } else {
      mav = new ModelAndView("forward:/Login");
    }

    return mav;
  }
  
  @RequestMapping(value = "/FormActionUser", method = RequestMethod.POST, params = "Cancelar")
  public ModelAndView CancelarUsuario(HttpServletRequest request, HttpServletResponse response,
  @ModelAttribute("Usuario_form") Usuario usuario_form) {
    ModelAndView mav;
    HttpSession session = request.getSession();
    UsersProfileImage profile_image;
    
    if(session.getAttribute("Usuario") != null) {
      mav = new ModelAndView("users");
      
      try{
        List<Usuario> usuarios = this.usuario_servicio.ListadoUsuarios();
          
        Map<Integer, String> img_usuarios = new HashMap<Integer, String>();
        for(int i = 0; i < usuarios.size(); i++) {
          if(usuarios.get(i).getImagen_perfil() != null) {
            profile_image = new UsersProfileImage();
            img_usuarios.put(usuarios.get(i).getId(), profile_image.Base64ImageRetrieve(usuarios.get(i).getImagen_perfil()));
          }
        }
        
        mav.addObject("ListadoUsuarios", usuarios);
        mav.addObject("ImagenesUsuarios", img_usuarios);
      } catch(Exception e) {
        return new ModelAndView("forward:/E_Login");
      }
      
    } else {
      mav = new ModelAndView("forward:/Login");
    }
    
    return mav;
  }
  
  @RequestMapping(value = "/FormActionUser", method = RequestMethod.POST, params = "Actualizar")
  public ModelAndView ActualizarUsuario(HttpServletRequest request, HttpServletResponse response,
  @ModelAttribute("Usuario_form") Usuario usuario_form) {
    ModelAndView mav;
    HttpSession session = request.getSession();
    UsersProfileImage profile_image;
      
    if(session.getAttribute("Usuario") != null) {      
      mav = new ModelAndView("users");
      
      try{
        usuario_servicio.ActualizarUsuario(usuario_form);
        mav.addObject("msg_result_action", "Usuario actualizado satisfactoriamente.");
        
        List<Usuario> usuarios = this.usuario_servicio.ListadoUsuarios();

        Map<Integer, String> img_usuarios = new HashMap<Integer, String>();
        for(int i = 0; i < usuarios.size(); i++) {
          if(usuarios.get(i).getImagen_perfil() != null) {
            profile_image = new UsersProfileImage();
            img_usuarios.put(usuarios.get(i).getId(), profile_image.Base64ImageRetrieve(usuarios.get(i).getImagen_perfil()));
          }
        }
        
        mav.addObject("ListadoUsuarios", usuarios);
        mav.addObject("ImagenesUsuarios", img_usuarios);
      } catch(Exception e) {
        mav = new ModelAndView();
        //return new ModelAndView("forward:/E_Login");
      }
    } else {
      mav = new ModelAndView("forward:/Login");
    }
    
    return  mav;
  }
  
  @RequestMapping(value = "/FormActionUser", method = RequestMethod.POST, params = "Crear")
  public ModelAndView CrearUsuario(HttpServletRequest request, HttpServletResponse response,
  @ModelAttribute("Usuario_form") Usuario usuario_form) {
    ModelAndView mav;
    HttpSession session = request.getSession();
    UsersProfileImage profile_image;
      
    if(session.getAttribute("Usuario") != null) {      
      mav = new ModelAndView("users");
      
      try{
        if(usuario_servicio.ValidarUsuario(usuario_form)) {
          usuario_servicio.AgregarUsuario(usuario_form);
          mav.addObject("msg_result_action", "Usuario creado satisfactoriamente.");
        } else {
          mav.addObject("msg_error_action", "El usuario ingresado se encuentra en uso.");
        }
        
        List<Usuario> usuarios = this.usuario_servicio.ListadoUsuarios();

        Map<Integer, String> img_usuarios = new HashMap<Integer, String>();
        for(int i = 0; i < usuarios.size(); i++) {
          if(usuarios.get(i).getImagen_perfil() != null) {
            profile_image = new UsersProfileImage();
            img_usuarios.put(usuarios.get(i).getId(), profile_image.Base64ImageRetrieve(usuarios.get(i).getImagen_perfil()));
          }
        }
        
        mav.addObject("ListadoUsuarios", usuarios);
        mav.addObject("ImagenesUsuarios", img_usuarios);
      } catch(Exception e) {
        mav = new ModelAndView();
        //return new ModelAndView("forward:/E_Login");
      }
      
    } else {
      mav = new ModelAndView("forward:/Login");
    }
    
    return  mav;
  }
  
}

and I'm having this problem:

28-Apr-2021 17:17:52.757 ADVERTENCIA [http-nio-8080-exec-119] org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.logException Resolved exception caused by handler execution: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported

I have a couple of form working like this way and I'm not having problem.

EDIT: Also it enters the method, I mean, I can do some System.out.println("someone"); line by line. I notice that if in the last two controllers I quit/comment usuario_servicio.ActualizarUsuario(usuario_form); and usuario_servicio.AgregarUsuario(usuario_form);, it is working fine. Seems that the problems are on these two method...

0

There are 0 best solutions below