【问题标题】:Spring MVC+REST: issue mapping requestsSpring MVC+REST:发出映射请求
【发布时间】:2015-01-31 12:01:48
【问题描述】:

我正在尝试通过带有一些 Spring Security 配置的 Spring MVC+REST 公开一个 REST API。但是,我得到了 404。

这是代码。

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app ...>
    <display-name>REST Project</display-name>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/applicationContext.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>rest</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>rest</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

rest-servlet:

<?xml version="1.0" encoding="UTF-8"?>
<beans ... />
    <mvc:annotation-driven />
  </beans>

mvc 配置:

<?xml version="1.0" encoding="UTF-8"?>

<beans ...>

    <mvc:annotation-driven />
    <bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- Example: a logical view name of 'showMessage' is mapped to '/WEB-INF/jsp/showMessage.jsp' -->
        <property name="prefix" value="/WEB-INF/view/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

应用上下文:

<?xml version="1.0" encoding="UTF-8"?>
<beans ... ">
    <context:component-scan base-package="org.my.project" />
</beans>

最后,服务 REST 控制器

@RestController
@RequestMapping("/service")
public class Service {

    @RequestMapping(value = "/public/{name}", method = RequestMethod.GET)
    public String storeEntityPublic(@PathVariable String name) {
        // do something

        return result;
    }
}

网址:localhost:8080//service/public/aname

我错过了什么?

【问题讨论】:

  • 这些 xml 配置只是我现在越来越不想看到的东西。为什么不使用基于 Java 的配置?
  • 因为我认为配置应该使用元数据完成,即注释或 XML。这是一个偏好问题。如果有什么我可以在不引入 Java 配置类的情况下从 XML 转移到注释,请告诉我。
  • 先看看基于java的配置。它通常不需要额外的配置类,只需要注释。
  • 好的,我会尝试,但我必须先修复 XML
  • 在根上下文(即ContextLoaderListener)中检测到您的组件,RequestMappingHandlerMapping bean(通过&lt;mvc:annotation-driven /&gt; 注册)不会自动检测到这些组件。在基于 servlet 的配置中扫描 @Controllers,在根配置中扫描除 @Controller 之外的所有内容。

标签: java spring rest spring-mvc request-mapping


【解决方案1】:

在您的 localhost:8080/service/public/aname 中,缺少上下文名称,这就是您收到 404 错误的原因。 URL 应该是 localhost:8080/abc/service/public/aname,这里 abc 是我的项目或上下文名称。所以请添加上下文名称并再次点击新网址。

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多