Estoy tratando de hacer una publicación con javascript usando ajax en un controlador de resorte
$("#crear").click(function () { var user = document.getElementById("user").value; var client = document.getElementById("client").value; var documents = document.getElementById("documents").value; if (user==null||client==null||documents==null){ document.getElementById("error").innerHTML='FALTAN COSASsssssssssss'; alert('Rellene todo los campos!') } const data={ fecha_inicio:'A', id:'A', fecha_entrega:'A', usuario:{ nombre:user }, cliente: { nombre:client } } $.ajax({ url: urlCrearAlta, type: "POST", contentType: 'application/json; charset=utf-8', dataType: 'json', data: data, success: function(data) { // ... } }); $.post(urlCrearAlta,JSON.stringify(data),function (data,satus){ console.log('${data} and status is ${status}') }); document.getElementById("error").innerHTML=user+client+documents; });y codigo java
@RequestMapping("/altas") @RestController public class AltaRestController { private AltaController altaController; public AltaRestController(AltaController altaController) { this.altaController = altaController; } @PostMapping("/create-alta") public void createAlta(@RequestBody AltaDTO altaDTO) { altaController.createAlta(altaDTO); }Recibo el error Resuelto [org.springframework.web.HttpMediaTypeNotSupportedException: Tipo de contenido 'aplicación/x-www-form-urlencoded;charset=UTF-8' no compatible]
Cuando uso $.ajax no envía ninguna solicitud, solo cuando uso $.post envía la solicitud
El problema parece ser cómo está utilizando el método $.post . jQuery usa application/x-www-form-urlencoded;charset=UTF-8 contentType en la publicación de forma predeterminada si no especifica otro contentType. Combinado con la anotación @RequestBody en el backend (que requiere application/json de forma predeterminada), da como resultado la excepción vista y el código de estado 415.
La solución a este problema debería ser bastante fácil, simplemente agregue la configuración correcta para el método .post, algo como esto:
$.post({ url: urlCrearAlta, type: "POST", contentType: 'application/json', dataType: 'json', data: JSON.stringify(data) }) .done((data, status) => { console.log(data, status); //do whatever you like with data and status }); Además, como se indica en la documentación de jQuery aquí , $.post es solo un método abreviado para $.ajax , por lo que si $.ajax no funciona y $.post sí, debe haber algún error en la forma en que configura la solicitud o cómo usted maneja los métodos de devolución de llamada. El principal sospechoso para mí sería la función de success que especifica en la solicitud $.ajax , verifique que no haya nada malo allí, o simplemente use los otros métodos de devolución de llamada, como .done , .fail y .always