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