[risolto]AngularJs $resource e Rest WebService

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

[risolto]AngularJs $resource e Rest WebService

Messaggio da ienaplinsky »

Buongiorno,
dopo giorni di studio, ho capito finalemente $resource come funziona...
Ho riscritto un rest webService in java e l'ho testato con l'estensione di chrome advanced rest client e funziona alla perfezione..
quando però mi interfaccio con angular le get funzionano (la get di tutti e la get per id)....
invece le richieste put e post falliscono
il servizio angular è questo

Codice: Seleziona tutto

services.factory('Recipes', [ '$resource', function($resource){
		return $resource('http://localhost:8080/RecipesRestService/rest/recipes/:recipeId', {recipeId: '@id'}, {
			query: {method:'GET', params: {recipeId: ''}, isArray:true},
			update: {method: 'PUT', headers : {'Content-Type': 'application/json'}},
			save: {method: 'POST', headers : {'Content-Type': 'application/json'}}
    });
} ]);

ho messo come content-type application/json perche i metodi del servizio PUT e POST li ho annotato in modo da consumare json..

queste sono le firme dei metodi annotate con PUT e POST

Codice: Seleziona tutto

@PUT
	@Consumes(MediaType.APPLICATION_JSON)
	public Response putRecipe(Recipe recipe) {..

@PUT
	@Consumes(MediaType.APPLICATION_JSON)
	public Response putRecipe(Recipe recipe)
quando cerco di servire una richiesta put ricevo un errore 403 forbidden, quando cerco di servire una richiesta POST ottengo un 405 method not allowed..
qualcuno riesce ad aiutarmi grazie
Ultima modifica di ienaplinsky il venerdì 7 novembre 2014, 16:46, modificato 1 volta in totale.
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: AngularJs $resource e Rest WebService

Messaggio da ienaplinsky »

allora per quanto riguarda le richieste POST c'era un problema nel war che generave eclipse, ho esportato il webservice in formato war poi l'ho scompattato e ho inserito la cartella in tomcat senza utilizzare l'archivio ma utilizzando il formato standard previsto da tomcat. Infatti deployando il progetto da eclipse funzionava alla perfezione mentre se esportavo il war e poi lanciavo tomcat non funzionava più non chiedetemi perchè. Il progetto lo esportavo perchè chrome bloccava le richieste da domini diversi o anche dallo stesso dominio ma su porte diverse. Per usufruire del webservice quindi l'applicazione angular e il webservice dovevano essere sullo stesso dominio stessa porta (localhost:8080) e da eclipse non riuscivo a lanciare l'app angular su tomcat quindi ho esportato il progetto a mano nella cartella webapp.
per quanto riguarda le richieste PUT va aggiunto il seguente pezzo nel web.xml del webservice (all'inizio sopra il tag della servlet) :

Codice: Seleziona tutto

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.origins</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.methods</param-name>
        <param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value>
    </init-param>
	</filter>
	<filter-mapping>
		<filter-name>CorsFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
e finalemnte funziona il tutto
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [risolto]AngularJs $resource e Rest WebService

Messaggio da Zoff »

Giusto un chiarimento, l'xml che hai aggiunto disabilita il blocco del browser su richieste provenienti da domini differenti. CORS = Cross Origin Request Sharing.
Se non è una cosa voluta non è bene abilitarlo.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
ienaplinsky
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 954
Iscrizione: giovedì 21 gennaio 2010, 9:56
Località: Napoli

Re: [risolto]AngularJs $resource e Rest WebService

Messaggio da ienaplinsky »

Non sono un esperto, senza quelle righe le richieste con put e delete generavano 403 forbidden....
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Google [Bot] e 14 ospiti