我在尝试使RESTEasy过滤器工作时遇到了麻烦。我确定我错过了什么,但我不知道是什么。
我正在使用以下方法进行测试:
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<User> listAll(@QueryParam("start") Integer startPosition, @QueryParam("max") Integer maxResult) {
String hql = "SELECT DISTINCT u FROM User u LEFT JOIN FETCH u.tasks ORDER BY u.id";
TypedQuery<User> findAllQuery = em.createQuery(hql, User.class);
if (startPosition != null) {
findAllQuery.setFirstResult(startPosition);
}
if (maxResult != null) {
findAllQuery.setMaxResults(maxResult);
}
final List<User> results = findAllQuery.getResultList();
return results;
}
这是我的web.xml:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="3.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>tasks-webapp</display-name>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<mime-mapping>
<extension>ico</extension>
<mime-type>image/x-icon</mime-type>
</mime-mapping>
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>br.com.tasks.rest.CORSFilter</param-value>
</context-param>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>
最后,我的过滤器:
@Provider
public class CORSFilter implements ContainerResponseFilter {
@Override
public void filter(final ContainerRequestContext requestContext,
final ContainerResponseContext cres) throws IOException {
cres.getHeaders().add("Access-Control-Allow-Origin", "*");
cres.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
cres.getHeaders().add("Access-Control-Allow-Credentials", "true");
cres.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
cres.getHeaders().add("Access-Control-Max-Age", "1209600");
}
}
结合使用它不起作用。我在过滤器中留下了一个断点,它从未被调用过。而我正在测试邮差,我的标题丢失了。我在这里看到了其他问题而且我的指示没有成功。我尝试使用Application类,也没有尝试过。
有人帮帮我吗?我很感激。 :)答案 0 :(得分:1)
您是否尝试过添加:
<context-param>
<param-name>resteasy.scan.providers</param-name>
<param-value>true</param-value>
</context-param>
按照here的说明注册您的提供商?因为默认值似乎是false