#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 Я добавил импорт в свой пост