Ich versuche Jersey zu lernen, indem ich einen kleinen RESTful Service erstelle. Ich möchte die Filter für bestimmte Gründe verwenden (Ich möchte die ContainerResponseFilter für CORS Header verwenden, um domänenübergreifende Anfragen zuzulassen). Ich bin jedoch nicht in der Lage, diese Filter meinen Anruf abzufangen. Ich habe alle Posts für dieses Problem gesehen und die meisten sagen, dass sie sich bei Annotation Provider oder in web.xml registrieren. Ich habe versucht, die Dateien auch in web.xml Registrierung als @Provider
Anmerkung für den Behälter gebenContainerRequestFilter ContainerResponseFilter dosent get
Hier ist meine web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html#d4e194 -->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/spring/config/BeanLocations.xml</param-value>
</context-param>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.rest.example</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.rest.example.cors</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>com.rest.example.CORSFilter</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>com.rest.example.RequestFilter</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/webresources/*</url-pattern>
</servlet-mapping>
</web-app>
Hier sind meine Filter:
package com.rest.example.cors;
import javax.ws.rs.ext.Provider;
import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;
@Provider
public class CORSFilter implements ContainerResponseFilter {
public ContainerResponse filter(ContainerRequest creq,
ContainerResponse cresp) {
cresp.getHttpHeaders().putSingle("Access-Control-Allow-Origin", "*");
cresp.getHttpHeaders().putSingle("Access-Control-Allow-Credentials", "true");
cresp.getHttpHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS, HEAD");
cresp.getHttpHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");
return cresp;
}
}
package com.rest.example.cors;
import javax.ws.rs.ext.Provider;
import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerRequestFilter;
@Provider
public class RequestFilter implements ContainerRequestFilter {
public ContainerRequest filter(ContainerRequest request) {
System.out.println("request filter");
return request;
}
}
Link zu meinem GitHub-Projekt.
Ich bin hier für 2 Tage fest.
Dank
Welchen Container/App-Server und welche Version von Jersey verwenden Sie? Haben Sie auch versucht, Ihre Filter in Ihrer Jersey Application-Klasse zu registrieren? – Baldy
Ich benutze Jersey Version 1.8. Ich verwende den VMware VFabric, der mit STS geliefert wird. Wie registrieren wir die Filter in der Jersey-Anwendungsklasse? – user2973475
Um Ihre Filter zu registrieren, fügen Sie sie zur 'getClasses' Methode in Ihrem' javax.ws.rs.core.Application' Objekt hinzu, obwohl es scheint, dass Ihre web.xml das für Sie behandeln sollte. Werden Ihre REST-Methoden aufgerufen? Woher wissen Sie, dass Ihre Filter nicht aufgerufen werden? – Baldy