java - Spring MVC RESTful 多 View - 404 未找到

标签 java spring-mvc view restful-architecture

我有一个 Web 应用程序,其中包含 JSP 作为 View 。但现在我正在尝试在同一个网络应用程序中实现 RESTful。我创建了一个新的 Controller ,其中将是我的 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.

I think, maybe I need to set up the XML to be compatible with both kinds, RESTful and a common web app, but I am not sure, and I do not know exactly how to do it.

Thanks and follows my codes:

My 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>

spring-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/**" />

Controller

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;
    }

最佳答案

问题是您的 SuggestionController 上应该有一个 @Controller 注释,以便 Spring 会将其视为 Controller (它也应该位于 com.restfultest 包中)。

现在我不确定这是否重要,但在您所在的 spring-context.xml 中

 <context:component-scan base-package="com.restfultest." />

我从来没有见过末尾有一个点的。因此,您可能会考虑删除它,但这可能不会产生任何影响。

关于java - Spring MVC RESTful 多 View - 404 未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16095666/

相关文章:

用于计算每秒数据包数的 Java 代码

java - 如何从对象列表中获取特定属性?

java - spring mvc Controller 中的线程不工作

asp.net-mvc-3 - 使用变量/参数创建 View

java - 隐藏 JTable 中的列

java - 使用cssSelector清除Chrome浏览器的浏览数据时,如何与#shadow-root(打开)中的元素进行交互

Spring MVC 与 Spring Integration HTTP : how to pass the queryString avoiding the "?" encoding with "%3F" ?

java - 从类路径资源解析 XML 文档时出现 IOException - HTTP 状态 500 - Servlet.init()

android - 查看带有单个背景图片的寻呼机android

visual-studio-2010 - 折叠并取消选择 TFS 挂起的更改层次结构