Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未找到Spring MVC路由-404_Java_Spring_Spring Mvc - Fatal编程技术网

Java 未找到Spring MVC路由-404

Java 未找到Spring MVC路由-404,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有一个Spring 4.1.0 MVC项目,托管在WildFly 10服务器中。我在发送请求到时遇到了麻烦,但没有得到404。以下是我的控制器和方法声明之一: @Controller @RequestMapping("/rest/message") public class HomeController { @RequestMapping(method = RequestMethod.POST, value = "/register") public @ResponseBody

我有一个Spring 4.1.0 MVC项目,托管在WildFly 10服务器中。我在发送请求到时遇到了麻烦,但没有得到404。以下是我的控制器和方法声明之一:

@Controller
@RequestMapping("/rest/message")
public class HomeController {
    @RequestMapping(method = RequestMethod.POST, value = "/register")
    public @ResponseBody PostResult register(HttpServletRequest request, @RequestHeader("userUid") String userUid,
        @RequestHeader("Uid") String Uid, @RequestHeader(value = "firstName", required = false) String FirstName,
        @RequestHeader(value = "lastName", required = false) String LastName,
        @RequestHeader(value = "emailAddress", required = false) String EmailAddress,
        @RequestHeader(value = "userName", required = false) String UserName,
        @RequestHeader(value = "country", required = false) String Country,
        @RequestHeader(value = "password", required = false, defaultValue = "") String Password,
        @RequestHeader(value = "deviceId", required = false, defaultValue = "") String deviceID) {
}

}
我正在使用邮递员将请求发送到。我回到404-找不到。我可以成功导航到以查看WildFly启动屏幕。我还可以在控制器的构造函数中设置断点以查看它的构造。此外,我在服务器日志中看到以下内容,这使我相信路由实际上已经注册:

INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/rest/message/register],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public com.justPick5.jp5.returnObjects.PostResult com.justPick5.jp5.HomeController.register(javax.servlet.http.HttpServletRequest,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)
为了排除参数成为问题的可能性,控制器中有一个简单的方法:

@RequestMapping(method = RequestMethod.GET, value = "/testNoParams")
public @ResponseBody PostResult testNoParams() {
    System.out.println("testNoParams");
    return null;
}
从邮递员那里得到同样的结果

这是我的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
    <context-param>
        <param-name>contextClass</param-name>
        <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </context-param>


    <!-- Processes application requests -->
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>

        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

感谢您的帮助。

我想这个问题与上下文路径有关。 ../rest/message/testNoParams

如果我没有错,您需要将正确的路径放置在/。/,也就是说,WAR已使用其他名称部署,可能是您遇到了错误的路径

这通常发生在wildfly部署中

e、 g: WAR部署的是ABC.1.0.0-BUILD-SNAPSHOT.WAR,但我们经常在路径中点击/ABC/


因此,请更正上下文路径。您可以在wildfly->deployment->deployment Location执行此操作

我也遇到了同样的问题,并通过将类注释从@Controller更改为@RestController解决了这个问题。

这个表单数据应该作为requestHeaders传递吗?看,是的。假设它们作为头传递。这是一个RESTful API cll,不是从HTML表单调用的。添加头参数对返回的404没有影响。您能否在@RequestMappingmethod=RequestMethod.GET、value=/rest/message/testNoParams等方法中映射整个url,并将其从类级别删除。您部署的应用程序名称在url中的什么位置?通常:\\在tomcat中。我不熟悉WildFly。请提供您的web.xml或webapp java配置。另外,正如@Valath所说,哪一个是您的应用程序名称上下文路径?如果您在转到时看到WildFly启动屏幕,则您的应用程序应在非根应用程序上下文中运行。可以通过编程方式完成此操作,如本链接中所示,将jboss-web.xml添加到包含以下内容的web-INF文件夹:/appName