2017-08-08 27 views
0

下面是矿过滤JAX RS(新泽西1.19)不能够调用滤波器

package com.rest.echidna.filter; 

import javax.ws.rs.ext.Provider; 

import com.sun.jersey.spi.container.ContainerRequest; 
import com.sun.jersey.spi.container.ContainerRequestFilter; 

@Provider 
public class CustomRestFilter implements ContainerRequestFilter { 

    @Override 
    public ContainerRequest filter(ContainerRequest arg0) { 
     System.out.println("CustomRestFilter.filter()"); 
     return null; 
    } 

} 

控制器 - >

package com.rest.echidna.controller; 

import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Map.Entry; 
import javax.ws.rs.DELETE; 
import javax.ws.rs.GET; 
import javax.ws.rs.HeaderParam; 
import javax.ws.rs.POST; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.HttpHeaders; 
import javax.ws.rs.core.Response; 
import com.rest.echidna.model.User; 
import com.rest.echidna.model.UserList; 
import com.sun.jersey.api.client.ClientResponse.Status; 

@Path(value = "/user/") 
public class UserRestController { 

    private static final List<User> usersDB = new ArrayList<User>(); 

    static { 
     System.out.println("Inside JERSEY"); 
     usersDB.add(new User("A", 26, "SSE")); 
     usersDB.add(new User("B", 28, "SSE")); 
     usersDB.add(new User("C", 29, "TA")); 
     usersDB.add(new User("D", 31, "TA")); 
     usersDB.add(new User("E", 35, "TL")); 

    } 

    @Path(value = "/getAllUser") 
    @GET 
    public Response getAllUsers(@HeaderParam(value = "Accept") String ht) { 
System.out.println(ht); 

     return Response.status(Status.OK).header("A", 123).entity(new UserList(usersDB)).build(); 

    } 

    @Path(value = "/getAllUser/{name}") 
    @GET 
    public User getUser(@PathParam("name") String name,@Context HttpHeaders ht) { 
     for(Entry<String, List<String>> m:ht.getRequestHeaders().entrySet()){ 
      System.out.println(m.getValue()); 
     } 
     User resultUser = null; 
     for (User u : usersDB) { 
      if (u.getName().equalsIgnoreCase(name)) { 
       resultUser = u; 
      } 
     } 

     return resultUser; 
    } 

    @Path(value = "/getAllUser/{name}") 
    @DELETE 
    public UserList deleteUser(@PathParam("name") String name) { 

     Iterator<User> it = usersDB.iterator(); 
     while (it.hasNext()) { 
      if (it.next().getName().equalsIgnoreCase(name)) { 
       it.remove(); 
      } 
     } 

     return new UserList(usersDB); 
    } 

    @Path(value = "/getAllUser/create") 
    @POST 
    public UserList createUser(User user) { 

     System.out.println(user); 
     usersDB.add(user); 

     return new UserList(usersDB); 
    } 

    @Path(value = "/getAllUser/{name}") 
    @PUT 
    public UserList createUser(@PathParam("name") String name, User user) { 

     User tempUser = null; 
     Iterator<User> it = usersDB.iterator(); 

     while (it.hasNext()) { 
      tempUser = it.next(); 
      if (tempUser.getName().equalsIgnoreCase(name)) { 
       tempUser.setAge(user.getAge()); 
       tempUser.setRole(user.getRole()); 

       it.remove(); 
       break; 
      } 
     } 
     usersDB.add(tempUser); 
     return new UserList(usersDB); 
    } 

} 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>RESTAPIJersey1</display-name> 
    <welcome-file-list> 
    <welcome-file/> 

    </welcome-file-list> 

    <servlet> 
     <servlet-name>jersey-serlvet</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.echidna</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name> 
      <param-value>com.rest.echidna.filter.CustomRestFilter</param-value> 
     </init-param> 

    </servlet> 

    <servlet-mapping> 
     <servlet-name>jersey-serlvet</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

罐 - > JARS

我已经评论过滤器参数,或者即使我删除评论它不会工作。 点击该URL后没有调用过滤器,但主控制器正在调用。我已经使用了它,但无法找到泽西岛1.19 Filter的适当解决方案。请帮助!

网址打在本地服务器 - > http://localhost:8080/RESTJersey/rest/user/getAllUser

回答

0

你的初始参数名称不正确

请从

com.sun.jersey.spi.container.ContainerRequestFilter 

com.sun.jersey.spi.container.ContainerRequestFilters 

更新更改:

这里是改变上述

  • 显示您的项目添加依赖jersey-grizzly2

Jersey 1做,你需要有两个依赖你的项目

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-server</artifactId> 
    <version>1.19.1</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-grizzly2</artifactId> 
    <version>1.19.1</version> 
</dependency> 
  • 您需要返回CustomRestFilter中的相同请求对象。我已经更新了你的问题。

  • 请更正您的代码,希望如何返回UserList对象。如果你想将它作为回报json,那么请看看here

这是怎么了能够看到它在我的控制台上:

09-Aug-2017 19:24:02.503 INFO [http-nio-8080-exec-32] com.sun.jersey.server.impl.application.WebApplicationImpl._initiate Initiating Jersey application, version 'Jersey: 1.19.1 03/11/2016 02:08 PM' 
CustomRestFilter.filter() 
Inside JERSEY 
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
+0

不,我已经改变了它com.sun.jersey .spi.container.ContainerRequestFilters但没有用。在控制台中没有获得任何输出。 –

+0

你能否更新完整的'web.xml'和'CustomRestFilter.java'? –

+0

我已经更新了一切。任何帮助我都不想使用泽西岛2,如果它可以用泽西岛1.19来完成的。任何地方过滤器方法的签名都是不同的我:e它是无效的,但是当我执行时它返回ContainerRequest。你可以请在本地尝试,并请提出建议。 –