当前位置: 首页 > 知识库问答 >
问题:

Spring REST 始终返回 404 未找到

柳业
2023-03-14

我用Spring 4和Spring security设置了一个简单的REST API

web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/mysabisabi-servlet.xml,
     classpath*:META-INF/spring/applicationContext.xml,
      classpath*:META-INF/spring/mysabisabi-security.xml
    </param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>mysabisabi-rest</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>mysabisabi-rest</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

AccountController.java

@RestController
@RequestMapping(value="/api")
public class AccountController {


    @RequestMapping(value="/update", method=RequestMethod.POST)
public ResponseEntity<GenericResponse> updateRegistrationToken(@RequestBody RegistrationToken token){
    GenericResponse response = new GenericResponse();
    //some code here

    return new ResponseEntity<GenericResponse>(response, HttpStatus.ACCEPTED);
}

}

mysabisabi-servlet.xml

<bean id="jacksonObjectMapper" class="com.mysabisabi.mapper.JsonCustomMapper" />

<bean id="jackson2HttpMessageConverter"
    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property name="objectMapper" ref="jacksonObjectMapper" />
</bean>

<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <ref bean="jackson2HttpMessageConverter" />
    </mvc:message-converters>
</mvc:annotation-driven>

mysabisabi-security.xml

 <http pattern="/oauth/token" create-session="stateless" authentication-manager-ref="clientAuthenticationManager"
    xmlns="http://www.springframework.org/schema/security">
<intercept-url pattern="/oauth/token" access="isFullyAuthenticated()"/>
<csrf disabled="true"/>
<anonymous enabled="false"/>
<http-basic entry-point-ref="clientAuthenticationEntryPoint"/>
<!-- include this only if you need to authenticate clients via request parameters -->
<custom-filter ref="clientCredentialsTokenEndpointFilter" after="BASIC_AUTH_FILTER"/>
<access-denied-handler ref="oauthAccessDeniedHandler"/>
 </http>

  <http pattern="/api/*" create-session="never" entry-point-ref="oauthAuthenticationEntryPoint"
    access-decision-manager-ref="accessDecisionManager" xmlns="http://www.springframework.org/schema/security">
<anonymous enabled="false"/>
<csrf disabled="true"/>
<intercept-url pattern="/api/*"  access="hasRole('ROLE_USER')"/>
<custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER"/>
<access-denied-handler ref="oauthAccessDeniedHandler"/>

应用程序上下文.xml

<mvc:annotation-driven />

<context:annotation-config />

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

<context:property-placeholder location="classpath:mysabisabi.properties" />

<tx:annotation-driven transaction-manager="transactionManager" />


//dataSource configuration

日志文件

2016-07-16 16:24:45 INFO  RequestMappingHandlerMapping:537 - Mapped "{[/api/update],methods=[POST]}" onto public org.springframework.http.ResponseEntity<com.mysabisabi.dto.response.GenericResponse> com.mysabisabi.controller.AccountController.updateRegistrationToken(com.mysabisabi.dto.request.RegistrationToken)

当我尝试访问 http://localhost:8080/mysabisabi/api/update 我得到HTTPStatus 404未找到 - 请求的资源不可用

我已经尝试了//*作为url模式,但仍然相同。

有人能指出我错过了什么吗?

谢了。

共有2个答案

干亮
2023-03-14

您的配置看起来不错。更改web.xml中的以下代码。

<servlet> <servlet-name>mysabisabi-rest</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/mysabisabi-servlet.xml</param-value> </init-param>    <load-on-startup>1</load-on-startup> </servlet>

还要检查下面的网址。加载上下文的顺序配置在 Web.xml中的位置 Spring服务项目

侯英达
2023-03-14

您的应用程序容器是什么?

例如,Tomcat会将应用程序名称添加到链接中,如<code>所示http://localhost:8080/mysabisabi/api/update,而谷歌应用引擎不会,如:http://localhost:8080/api/update

 类似资料:
  • 我正在按照一些教程从头开始建立一个spring mvc项目。最初,我将web应用程序配置为在Tomcat中运行。我编写了一个简单的controller类,请求点击“/”。但tomcat总是向我显示“HTTP状态404-找不到”错误。 我看了很多这样的问题,但那些答案对我都不起作用 删除tomcat安装并重新配置。当点击localhost:8080/时,我将获得tomcat主页。 检查了代码的拼写

  • 我有一个xamarin应用程序,可以从webAPI中提取数据。我多次检查api地址,我确信它是正确的。当我调试代码时,服务器上出现404 not found错误。然而,当我将URL复制并粘贴到浏览器时,我得到了预期的结果。我不明白为什么我的应用程序返回404。 我的方法: 我的桥接方法到HttpClient的PostAsync方法: 代币:正确 API URL:正确(我从调试输出中检查“/”符号。

  • 我能够得到一个Spring Boot项目的测试运行,但在@state测试上总是得到404。 奇怪的是,我可以通过打印出请求信息和授权头来判断它到达了正确的endpoint。我放入了一个debug语句,并验证了我可以使用与测试相同的凭据和endpoint进行调用。然而,测试总是失败的404。是不是我的设置中缺少了什么?

  • 我正在用Laravel 8制作一个论坛,基本上每当用户在这个论坛上提问时,它应该被重定向到这个问题。 我还想使重定向过程基于问题的字段。

  • 我创建了一个部署、一个服务和一个入口,以便能够从我的主机访问NGINX web服务器,但我一直没有找到404。经过长时间的故障排除,我已经到了一个非常欢迎帮助的地步。 步骤和相关yaml文件如下所示。 启用Minikube NGINX入口控制器 minikube插件支持入口 创建NGINX web服务器部署 创建ClusterIP服务以管理对POD的访问 创建入口以从集群外部访问服务 测验 连接到

  • 问题内容: 我正在使用AngularJS 1.4.0和服务。以下代码将始终打印出一个空对象: 我试过了: 使用AngulerJS 1.3.15,并且在刷新浏览器时cookie不会持久存在(但至少会创建cookie)。 添加有效期。 确保在我的浏览器(Chrome)中启用了Cookie。 尝试使用普通的旧JS,但仍然无法正常工作。 我在任何地方都找不到类似的问题。 谢谢。 问题答案: 对于偶然发现此