我有一个将JSP作为视图的Web应用程序。但现在我正在尝试在同一个Web应用程序中实现RESTful。我创建了一个新的控制器,这将是我的RESTful(我不确定它是否有意义)。
我通过互联网找到了一些例子,我一直试图按照这些例子制作我的RESTful。
当我访问我的RESTful URL时,它会返回 404 Not Found 。我在stackoverflow中看了一些类似的问题,并尝试更改一些XML配置,但到目前为止它都不起作用。
When I access: URL: localhost:8080/restfultest/rest/suggestions/11 returns me: 404. When I access: URL: localhost:8080/restfultest/loginForm Returns me the correct JSP page.
我想,也许我需要设置XML以兼容两种类型,RESTful和一个常见的Web应用程序,但我不确定,我不确切知道如何做到这一点。
谢谢并遵循我的代码:
我的web.xml
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
弹簧context.xml中
<context:component-scan base-package="com.restfultest." />
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="contentType" value="application/json"/>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<util:list id="beanList">
<ref bean="jsonMessageConverter"/>
</util:list>
</property>
</bean>
<bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<mvc:interceptors>
<bean class="com.restfultest.interceptor.AutorizadorInterceptor"></bean>
<bean class="com.restfultest.interceptor.ConnectionInterceptor"></bean>
</mvc:interceptors>
<mvc:resources location="/resources/" mapping="/resources/**" />
控制器
public class SuggestionController {
@Autowired
private SuggestionService suggestionService;
@Autowired
private View view;
private static final String DATA_FIELD = "data";
private static final String ERROR_FIELD = "error";
private static final String CONTENT_RANGE_HEADER = "Content-Range";
private static final String ACCEPT_JSON = "Accept=application/json";
@RequestMapping(value = "/rest/suggestions/{suggestionId}", method = RequestMethod.GET, headers=ACCEPT_JSON)
public ModelAndView getSuggestion(@PathVariable("suggestionId") String suggestionId) {
Suggestion suggestion = null;
if (isEmpty(suggestionId) || suggestionId.length() < 5) {
String sMessage = "Error invoking getSuggestion - Invalid suggestion Id parameter";
return createErrorResponse(sMessage);
}
try {
suggestion = suggestionService.getSuggestionById(suggestionId);
} catch (Exception e) {
String sMessage = "Error invoking getSuggestion. [%1$s]";
return createErrorResponse(String.format(sMessage, e.toString()));
}
return new ModelAndView(view, DATA_FIELD, suggestion);
}
private ModelAndView createErrorResponse(String sMessage) {
return new ModelAndView(view, ERROR_FIELD, sMessage);
}
public static boolean isEmpty(String s_p) {
return (null == s_p) || s_p.trim().length() == 0;
}
答案 0 :(得分:2)
问题是你的SuggestionController上应该有一个@Controller注释,所以Spring会将它当作一个Controller(它也应该在com.restfultest包中)。
现在我不确定这是否重要,但在你有
的spring-context.xml中 <context:component-scan base-package="com.restfultest." />
我从来没有在最后用圆点看过它。所以你可以考虑删除它,但它可能没有什么区别。