Как решить java .lang.NoSuchMethodException: package.MyCustomFilter. <init>() при запуске фильтра сервлета - PullRequest
0 голосов
/ 21 июня 2020

Сервер приложений не может запустить фильтр сервлетов. Сообщение об ошибке: java.lang.NoSuchMethodException: package.MyCustomFilter.<init>(). HttpFilter расширяет GenericFilter, который реализует метод init (). Так что нет необходимости отменять его. Я уже пытался переопределить метод init (), это не решило проблему.

Класс фильтра:

public class MyCustomFilter extends HttpFilter {

    private static final long serialVersionUID = -5281928035553598730L;
    private static Logger log = Logger.getLogger(MyCustomFilter.class.getName());

    protected MyCustomFilter() {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        super.doFilter(req, res, chain);
        log.info("filter Request");
    }

}

web. xml


<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
       ...
     <filter>
        <filter-name>myCustomFilter</filter-name>
        <filter-class>com.dtmarius.gateway.filter.MyCustomFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>myCustomFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

1 Ответ

1 голос
/ 21 июня 2020

Я обнаружил, что <init>() не является методом init () из Фильтра. Исключение сообщает нам, что конструктора publi c не существует. Каждому фильтру сервлета нужен конструктор publi c. Просто добавьте один, и проблема будет решена. В моем примере вы также можете удалить ненужный защищенный конструктор. Без этого используется конструктор по умолчанию.

...