Java 8 и Spring MVC: ошибка «404 не найдена» устранена при удалении интерфейса констант. В чем проблема?

#java #spring #spring-mvc

#java #весна #spring-mvc

Вопрос:

У меня есть класс, содержащий метод GET. Когда я пытаюсь вызвать его с помощью Postman, я получаю ошибку 404 not found . Однако, если я удалю «implements SubscriptionConstants» и вызову его с точно таким же запросом, все в порядке (код состояния 200).

Вот класс, в котором я получаю ошибку 404:

 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; 
// other imports

@Controller
@Measured(canStartRootStack = true)
public class AlertsResource extends AbstractResource implements SubscriptionConstants {


    @Autowired
    private SubscriptionSubscriberService subscriptionSubscriberService;

    @RequestMapping(value = "/alerts/{triggerid}/subscribers", method = RequestMethod.GET,
            produces = APPLICATION_JSON_UTF8_VALUE)
    @ResponseBody
    public List<SubscriptionSubscriber> loadSubscribers(@PathVariable final String triggerid) {
        return subscriptionSubscriberService.getSubscribers(triggerid);
    }
 
   // other methods...

    }
  

И вот запрос, который я использую с Postman в обоих случаях :

 http://localhost:8080/myapp/resource/alerts/repository:cfg#b02173a8-9b8a-4d4f-b6b0-5df427286d87/subscribers?noCache=4fc0a0c1-7f52-4eea-854d-ef4084eaac71
  

SubscriptionConstants — это интерфейс, но он содержит только такие константы, как :

 String  USER                            = "user";
String  LOGIN                           = "login";
  

Вот mvc-servlet.xml файл :

 <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        ">

    <!-- Sub Context used for Rest services -->

    <aop:aspectj-autoproxy />

    <context:component-scan base-package="com.mycompany.myapp.webapp.resource" />
    <context:property-placeholder/>
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="false">
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper" ref="jsonObjectMapper"/>
            </bean>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>

</beans>
  

Вот выдержка из web.xml файл :

 <!-- Spring MVC -->
<servlet>
    <servlet-name>mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:com/mycompany/myapp/webapp/mvc-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>mvc</servlet-name>
    <url-pattern>/resource/*</url-pattern>
</servlet-mapping>
  

Я также проверил файлы безопасности xml, нерабочий класс не имеет определенного параметра безопасности.

В чем может быть проблема?

ОБНОВЛЕНИЕ: я решил ошибку 404, удалив «implements SubscriptionConstants» и используя imports вместо реализации интерфейса constants, например :

 import static com.mycompany.myapp.service.alert.subscription.constants.SubscriptionConstants.USER;
  

Но я до сих пор не знаю, почему «implements SubscriptionConstants» приводит к ошибке 404.

Когда все еще было «implements SubscriptionConstants», я проверил журналы при запуске сервера Tomcat, я не нашел ошибок в журналах и ничего с ключевыми словами «controller» или «AlertsResource» или «SubscriptionConstants»

Комментарии:

1. оба файла находятся в одном пакете. Если возможно, не могли бы вы поделиться скриншотом структуры проекта. одной из причин может быть то, что один из файлов находится в пакете, который не сканируется. может быть из-за того, что он не является дочерним для основного пакета приложения

2. можете ли вы опубликовать, как отображаются контроллеры..

3. да, оба файла находятся в одном пакете

4. Пожалуйста, поделитесь инструкцией импорта аннотации контроллера из класса, в котором произошел сбой.

5. @JamesJithin Я добавил импорт в свой пост