/ / @DELETE no funciona en AngularJS + JAVA + CORS - javascript, java, angularjs, cors

@DELETE no funciona en AngularJS + JAVA + CORS - javascript, java, angularjs, cors

He estado jugando con AngularJS por unas semanas ... y me encontré en una esquina ... El escenario:

Un REST de Java (Resteasy) en localhost: 8080 (donde ve company.com es localhost)

Una aplicación AnguljarJS servida por grunt en 9001

El extremo JAVA está utilizando el filtro CORS.

<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

y el método

@DELETE
@Path("/{id}")
public void delete(@PathParam("id")Long id);

No hace ninguna diferencia si agrego los "@Consumes ({MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN})"

El lado de AngularJS: Servicio:

service.factory("SensorTypeService", function($resource){
return $resource("http://company.com:8080/hackstation-web/service/sensortype/:Id",
{Id: "@Id"},
{
"update": {method: "POST"},
"remove": {method:"DELETE"},
"reviews": {"method": "GET", "params": {"reviews_only": "true"}, isArray: true}

});

});

la llamada:

$scope.delete = function(id){
SensorTypeService.remove({},{"Id": id}, function(){
$scope.refresh();
});
};

Hasta ahora, lo que descubrí: Si corro: rizo http://company.com:8080/hackstation-web/service/sensortype/9 -X BORRAR

En la terminal, funciona bien !! el método se llama en el lado de Java y se elimina.

En mi aplicación, puedo ver todos los GET POSTmétodos en la consola del firebug, pero el BORRAR no se muestra, arriba. Pero puedo depurar el método y puedo ver que va desde angularjs-resource.js a angular.js. Puedo ver que el método está configurado a BORRAR, el Aceptar es del tipo json en texto sin formato ... parece esta bien ... pero de alguna manera es solo dosent!

He leído muchas preguntas similares aquí, probé un montón de ellas y no obtuve nada.

Por lo que pude ver, la url se crea como debería ser, la aceptación está ahí y el método es DELETE. Pero de alguna manera solo aparecen dosent en la consola.

Por cierto, todos los otros métodos de consulta, actualización ... todo funciona bien!

¿Algunas ideas?

Respuestas

0 para la respuesta № 1

Por defecto, CORSFilter solo soporta GET, POST, HEAD, OPCIONES. Usted debe agregar BORRAR a la lista de métodos soportados:

    <init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, POST, HEAD, OPTIONS, DELETE</param-value>
</init-param>

Los detalles son aquí