Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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 什么';这两者之间的区别是什么;http://localhost/app/hello" 及;http://localhost/app/hello/"?_Java_Spring_Spring Mvc_Tomcat_Server - Fatal编程技术网

Java 什么';这两者之间的区别是什么;http://localhost/app/hello" 及;http://localhost/app/hello/"?

Java 什么';这两者之间的区别是什么;http://localhost/app/hello" 及;http://localhost/app/hello/"?,java,spring,spring-mvc,tomcat,server,Java,Spring,Spring Mvc,Tomcat,Server,我已经写了一个基于SpringMVC的控制器 @Controller @RequestMapping("/hello") public class JsonController { @RequestMapping(value="/",method=RequestMethod.GET) @ResponseBody public Person service(){ Person person=new Person(); person.setI

我已经写了一个基于SpringMVC的控制器

@Controller
@RequestMapping("/hello")
public class JsonController {

    @RequestMapping(value="/",method=RequestMethod.GET)
    @ResponseBody
    public Person service(){
        Person person=new Person();
        person.setId(3);
        person.setName("666");
        return person;
}
当我访问“”时,我得到404; 当我访问“”时,我得到202 OK。
“”和“”之间有什么区别?

我想,这与您的tomcat重定向配置有关。尝试在context.xml中包含以下属性

mapperContextRootRedirectEnabled

Desc:如果启用,对web应用程序上下文根的请求将在必要时由映射程序而不是默认Servlet重定向(添加尾部斜杠)。这会更有效,但会产生确认上下文路径存在的副作用。如果未指定,则使用默认值true

mapperDirectoryRedirectEnabled

Desc:如果启用,对web应用程序目录的请求将在必要时由映射程序(而不是默认Servlet)重定向(添加尾部斜杠)。这会更有效,但会产生副作用,即确认目录是否存在。如果未指定,则使用默认值false


参考资料:

我想,这与您的tomcat重定向配置有关。尝试在context.xml中包含以下属性

mapperContextRootRedirectEnabled

Desc:如果启用,对web应用程序上下文根的请求将在必要时由映射程序而不是默认Servlet重定向(添加尾部斜杠)。这会更有效,但会产生确认上下文路径存在的副作用。如果未指定,则使用默认值true

mapperDirectoryRedirectEnabled

Desc:如果启用,对web应用程序目录的请求将在必要时由映射程序(而不是默认Servlet)重定向(添加尾部斜杠)。这会更有效,但会产生副作用,即确认目录是否存在。如果未指定,则使用默认值false


参考资料:

查看控制器代码

@RequestMapping("/hello")
public class JsonController
您有url映射->“/hello”

操作(服务)url映射为“/”

现在,每当我们为控制器提供映射时,控制器的每个操作都需要控制器URL路径作为前缀(如果URL映射是在控制器中定义的),正如您提到的,您的控制器与“/hello”的映射和操作服务与“/”的URL映射 因此,当您需要访问服务时,请执行操作-> 您需要控制器的basepath(如果控制器中定义了请求URL映射)+操作URL映射

-> "/hello" + "/"   => "/hello/"
因此,在访问URL“”的情况下,它很容易找到
服务
操作并返回响应

现在,当您尝试访问URL“”时,URL映射将搜索此映射并在控制器映射中找到它(因为它在您的案例中已定义),但没有为其定义任何操作,这就是为什么会得到404

您可以将其定义为默认操作,如:

@RequestMapping(method=RequestMethod.GET)
    public Person defaultAction() { 
----your code
}

因此,现在如果您点击“”按钮,您将返回有效响应,而不是404查看控制器代码

@RequestMapping("/hello")
public class JsonController
您有url映射->“/hello”

操作(服务)url映射为“/”

现在,每当我们为控制器提供映射时,控制器的每个操作都需要控制器URL路径作为前缀(如果URL映射是在控制器中定义的),正如您提到的,您的控制器与“/hello”的映射和操作服务与“/”的URL映射 因此,当您需要访问服务时,请执行操作-> 您需要控制器的basepath(如果控制器中定义了请求URL映射)+操作URL映射

-> "/hello" + "/"   => "/hello/"
因此,在访问URL“”的情况下,它很容易找到
服务
操作并返回响应

现在,当您尝试访问URL“”时,URL映射将搜索此映射并在控制器映射中找到它(因为它在您的案例中已定义),但没有为其定义任何操作,这就是为什么会得到404

您可以将其定义为默认操作,如:

@RequestMapping(method=RequestMethod.GET)
    public Person defaultAction() { 
----your code
}

因此,现在如果您点击“”按钮,您将返回有效的响应not 404

,区别在于您将
/
a结尾映射到带有
@RequestMapping(value=“/”,method=RequestMethod.GET)
的函数
service()
,而结尾没有
//code>的URL映射为nothing。如果你调用一个url,rest api没有为你分配任何东西,你自然会得到一个404。区别在于,你用
@RequestMapping(value=“/”,method=RequestMethod.get)
/
a结尾映射到函数
service()。如果您调用一个url,RESTAPI没有为您分配任何内容,那么自然会得到404。