首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAX RS(泽西岛1.19 )无法调用过滤器

JAX RS(泽西岛1.19 )无法调用过滤器
EN

Stack Overflow用户
提问于 2017-08-08 08:36:44
回答 1查看 990关注 0票数 0

下面是我的过滤器

代码语言:javascript
复制
    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;
    }

}

控制员->

代码语言:javascript
复制
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

代码语言:javascript
复制
    <?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>

罐子->

我已经评论了过滤器参数,或者即使我删除了注释,它也不会工作。点击url后,没有调用过滤器,但是主控制器正在被调用,我已经在googled上搜索了它,但是没有找到适合泽西1.19 Filter.Please帮助的解决方案!!

在本地服务器中命中的URL -> http://localhost:8080/RESTJersey/rest/user/getAllUser

EN

回答 1

Stack Overflow用户

发布于 2017-08-08 09:17:13

您的init param名称不正确。

请把它从

代码语言:javascript
复制
com.sun.jersey.spi.container.ContainerRequestFilter

代码语言:javascript
复制
com.sun.jersey.spi.container.ContainerRequestFilters

更新:

下面是对您的项目所做的更改,如下所示

  • 添加依赖项jersey-grizzly2

根据泽西岛1,项目需要有两个依赖项

代码语言:javascript
复制
<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,请查看这里

这就是我在我的控制台上看到它的方式:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45563342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档