javascript - spring vuejs example
El método de solicitud ''OPCIONES'' no es compatible-Aplicación Spring Boot (1)
Estoy usando Spring Boot en el lado del servidor y Angularjs en el lado del cliente, configuré CORS de la aplicación Spring Boot usando un filtro y funcionó para los métodos GET , POST , pero cuando intenté enviar la solicitud PUT usando el módulo $ http , obtuve esto en mi consola del navegador:
Aviso: url = http: // localhost: 8080 / localbusinessusers / [object% 20Object]
OPCIONES url (función anónima) @ angular.js: 11442sendReq @ angular.js: 11235serverRequest @ angular.js: 10945processQueue @ angular.js: 15552 (función anónima) @ angular.js: 15568Scope. $ Eval @ angular.js: 16820Scope. $ digest @ angular.js: 16636Scope. $ apply @ angular.js: 16928done @ angular.js: 11266completeRequest @ angular.js: 11464requestLoaded @ angular.js: 11405 app.html: 1 XMLHttpRequest no puede cargar la URL . La respuesta para la verificación previa tiene un código de estado HTTP no válido 405 angular.js: 11442 Error al cargar la XHR: PUT " url ".
Y lo tengo en la consola Spring Boot :
2016-03-08 23: 19: 51.212 WARN 27044 --- [XNIO-2 task-2] osweb.servlet.PageNotFound: El método de solicitud ''OPTIONS'' no es compatible
Mi filtro CORS :
package com.datcom.fouras;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
@Component
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "http://localhost");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with, X-Custom-Header");
chain.doFilter(req, res);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
Mi método REST en mi RestController :
@RequestMapping(value = "/localbusinessusers", method = RequestMethod.PUT)
public LocalBusinessUser update(LocalBusinessUser localBusinessUser) {
log.debug("REST request to update a local business user : {}", localBusinessUser);
if (localBusinessUser.getId() == null) {
return save(localBusinessUser);
} else {
LocalBusinessUser localBusinessUser2 = localBusinessUserRepository.findOne(localBusinessUser.getId());
localBusinessUser2 = localBusinessUser;
return localBusinessUserRepository.saveAndFlush(localBusinessUser2);
}
}
Y finalmente, mi solicitud de $ http :
$http.put(''http://localhost:8080/localbusinessusers/'' + localBusinessUser)
.success(function (data, status, headers) {
console.log(''data: '' + data);
})
.error(function (data, status, header, config) {
console.log(''data: '' + data);
console.log(''status: '' + status);
console.log(''header: '' + header);
console.log(''config: '' + config);
});
Aviso: la solicitud PUT funciona con Advanced REST Client
Si se prohíben las solicitudes de Opciones, puede configurar el DispatcherServlet
para enviar todas las solicitudes de opciones al agregar esto a su application.properties
:
spring.mvc.dispatch-options-request=true
Para obtener más información sobre las solicitudes de opciones y Spring MVC utilizando Spring Boot, hay una buena publicación para la Solicitud de Opciones de Manejo utilizando Spring Boot.
También puede probar los ejemplos en esta publicación para manejar CORS y respaldar solicitudes de Opciones creando un controlador simple para devolver NO_CONTENT para todas las solicitudes de Opciones: http://dontpanic.42.nl/2015/04/cors-with-spring-mvc .html