Greetings Community, it generates the following output message when I want to update or create a record:
Request method 'POST' not supported;
Resolved exception caused by Handler execution: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported.
Below is the code.
In controller:
@RequestMapping("/direccion")
@Controller
@EnableGlobalMethodSecurity(prePostEnabled=true,securedEnabled = true,
jsr250Enabled = true)
public class DireccionController {
private DireccionService direccionService;
private UsuarioService usuarioService;
public DireccionController(DireccionService direccionService,UsuarioService usuarioService) {
this.direccionService = direccionService;
this.usuarioService=usuarioService;
}
@GetMapping("/actualizar/{id}")
public String actualizarDireccion(@PathVariable Long id,Model model){
model.addAttribute("direccion",direccionService.getDireccion(id));
model.addAttribute("usuarios",usuarioService.usuarioLista());
return "direccion/lista";
}
@GetMapping("/lista")
public String direccionLista(Model model) {
model.addAttribute("direcciones",direccionService.direccionLista());
model.addAttribute("usuarios",usuarioService.usuarioLista());
return "direccion/lista";
}
@GetMapping("/lista/{id}")
public Optional<Direccion> getDireccion(@PathVariable Long id){
return direccionService.getDireccion(id);
}
@RequestMapping(value="/agregar",method=RequestMethod.GET)
public String direccionForm(Model model){
model.addAttribute("direccion",new Direccion());
model.addAttribute("usuarios", usuarioService.usuarioLista());
return "direccion/lista";
}
@PostMapping("/agregar")
@PreAuthorize("hasRole('admin')")
public String agregarDireccion(@ModelAttribute("direccion") Direccion direccion,Model model,BindingResult bindingResult)throws IOException {
String mensaje="";
if(direccion.getId()==null ){
mensaje="agregado";
}
if(bindingResult.hasErrors()){
}
else{
mensaje="actualizado";
}
model.addAttribute("mensaje", direccionService.agregarDireccion(direccion).getUsuario().getUsuarioNombre()+"direccion"+mensaje+"direccion agregado...");
return "redirect:/direccion/lista";
}
@GetMapping("/eliminar/{id}")
public String eliminarDireccion(@PathVariable Long id,Model model){
model.addAttribute("mensaje",direccionService.eliminarDireccion(id));
return "redirect:/medida/lista";
}
}
in the jsp.
<div class="container">
<br>
<button class="btn btn-primary nBtn" >Nuevo</button>
<br>
<br>
<div class="card">
<div class="card-block">
<table class="table table-hover table-bordered">
<thead>
<tr>
<th>Codigo</th>
<th>Ciudad</th>
<th>Distrito</th>
<th>Pais</th>
<th>Usuario</th>
<th>Actualizar</th>
<th>Eliminar</th>
</tr>
</thead>
<tbody>
<c:forEach items="${direcciones}" var="direccion">
<tr>
<td>${direccion.id}</td>
<td>${direccion.ciudad}</td>
<td>${direccion.distrito}</td>
<td>${direccion.pais}</td>
<td>${direccion.usuario.usuarioNombre}</td>
<td><a href="${path}/direccion/actualizar/${direccion.id}" class="btn btn-primary eBtn">Actualizar</a></td>
<td><a href="${path}/direccion/eliminar/${direccion.id}" class="btn btn-danger">Eliminar</a></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
<div class="myForm">
<form:form action="${path}/direccion/lista" method="post" modelAttribute="<direcciones>,<usuarios>" >
<div class="modal fade" id="exampleModal"
tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Actualizar o Guardar</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="form-group">
<label for="id" class="col-form-label">Codigo:</label>
<input type="text" class="form-control" id="id" name="id" value=""/>
</div>
<div class="form-group">
<label for="pais" class="col-form-label">Pais:</label>
<input type="text" class="form-control" id="pais" name="pais" value=""/>
</div>
<div class="form-group">
<label for="ciudad" class="col-form-label">Ciudad:</label>
<input type="text" class="form-control" id="ciudad" name="ciudad" value=""/>
</div>
<div class="form-group">
<label for="distrito" class="col-form-label">Distrito:</label>
<input type="text" class="form-control" id="distrito" name="distrito" value=""/>
</div>
<div class="form-group">
<label for="usuario" class="col-form-label">Usuario:</label>
<select name="usuario.id" id="usuario" required>
<c:forEach items="${usuarios}" var="usuario" >
<option value="${usuario.id}">${usuario.usuarioNombre}</option>
</c:forEach>
</select>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cerrar</button>
<input type="submit" class="btn btn-primary" value="guardar"/>
</div>
</div>
</div>
</div>
</form:form>
</div>
In the JavaScript:
$(document).ready(function(){
$('.nBtn, .table .eBtn').on('click',function(event){
event.preventDefault();
var href=$(this).attr('href');
var text=$(this).text();
if(text=='Actualizar' ){
$.get(href,function(direccion,usuario,status){
$('.myForm #id').val(direccion.id);
$('.myForm #ciudad').val(direccion.ciudad);
$('.myForm #distrito').val(direccion.distrito);
$('.myForm #pais').val(direccion.ciudad);
$('.myForm #nombre').val(usuario,nombre);
});
$('.myForm #exampleModal').modal();
}else{
$('.myForm #id').val('');
$('.myForm #ciudad').val('');
$('.myForm #distrito').val('');
$('.myForm #pais').val('');
$('.myForm #usuario').val('');
$('.myForm #exampleModal').modal();
}
});
});
You are sending this from your form:
But you only have one
@GetMapping("/lista")
:you need a
@PostMapping("/lista")
. TheError 500
is an internal error and the trace you place:...means that spring is looking for a method that resolves
/direccion/lista
byPOST
but there isn't one. There is only one match toGET
... though that doesn't interest the spring xS bum.