Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 SpringMVC测试-在集成测试需要特定类型时注入模拟存储库_Java_Spring Mvc_Url Pattern_Path Variables - Fatal编程技术网

Java SpringMVC测试-在集成测试需要特定类型时注入模拟存储库

Java SpringMVC测试-在集成测试需要特定类型时注入模拟存储库,java,spring-mvc,url-pattern,path-variables,Java,Spring Mvc,Url Pattern,Path Variables,我已经使用SpringMVC3编写了一个web应用程序。它提供了一个返回JSON的端点。我确实使用url参数成功运行了它,但现在我需要将其更改为使用路径变量 我换了控制器 发件人: 致: 和我的web xml来映射url 发件人: 数据代码 org.springframework.web.servlet.DispatcherServlet 上下文配置位置 类路径:/config/servlet-config.xml 数据代码 /一些/数据 致: 数据代码 org.springframewo

我已经使用SpringMVC3编写了一个web应用程序。它提供了一个返回JSON的端点。我确实使用url参数成功运行了它,但现在我需要将其更改为使用路径变量

我换了控制器

发件人:

致:

和我的web xml来映射url

发件人:


数据代码
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
类路径:/config/servlet-config.xml
数据代码
/一些/数据
致:


数据代码
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
类路径:/config/servlet-config.xml
数据代码
/一些/数据/*
但是我得到了一个404用于http请求:
http://localhost/some/data/1234
我知道1234的存在

最重要的是,请求甚至从未到达控制器方法,因此它必须是WebXMLURL模式配置

作为一个测试,我尝试更改url模式,以使请求与代码完全匹配,它按预期返回JSON,因此我知道它是url模式。我就是不知道怎么修

我试过:

  • /
  • /*
  • /一些/数据*
  • /一些/数据/*

  • 如果您正在使用Eclipse:

  • 在服务器视图中双击服务器
  • 转到“模块”选项卡
  • 检查应用程序的路径

  • 最后一个应用程序url=path+some/data/1234您的url模式应该是:

      <servlet-mapping>
            <servlet-name>dataBycode</servlet-name>
            <url-pattern>/</url-pattern>
      </servlet-mapping>
    
    
    数据代码
    /
    
    另一方面,您是否可以尝试在getDataByCode方法中访问并放置System.out.println,以查看该方法是否被调用


    如果它能工作,我认为问题来自Spring MVC,它将“1234”解释为一个整数而不是字符串。

    您的Spring配置是如何加载的?它是通过xml配置加载的,您认为这会影响应用程序使用除路径变量以外的任何变量吗?如果是这样的话,我将在问题中补充这一细节。如果不使用path变量,请记住应用程序按预期运行。例如,当路径参数作为
    code
    值时,它工作正常。实际上,弹簧配置不应该是问题。我添加了一个带有一些提示的答案。正如我在问题中所说的,我知道路径是正确的,因为我可以允许访问web.xml url格式的特定值,并返回预期的数据。当我尝试使用一个路径变量时,问题出现了,我得到了一个404。嗯,很有趣,我会尝试一下,然后再给你回复。我将url模式更改为
    /
    ,现在它似乎可以工作了,我最终没有路径变量类型的问题。奇怪的是,我在过去尝试过它,也许我的配置已经改变,因为我发布了这个问题,修复了一个更深层次的问题。
    @Controller
    public class DataController {
    
        @Autowired
        private IDataService dateService;
    
        @RequestMapping(
                value = "/some/data/{code}",
                method = RequestMethod.GET,
                produces = "application/json"
        )
        public @ResponseBody Data getDataByCode(@PathVariable String code) {
            return versionService.getDataByCode(code);
        }
    }
    
        <servlet>
            <servlet-name>dataBycode</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:/config/servlet-config.xml</param-value>
            </init-param>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>dataBycode</servlet-name>
            <url-pattern>/some/data</url-pattern>
        </servlet-mapping>
    
        <servlet>
            <servlet-name>dataBycode</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:/config/servlet-config.xml</param-value>
            </init-param>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>dataBycode</servlet-name>
            <url-pattern>/some/data/*</url-pattern>
        </servlet-mapping>
    
      <servlet-mapping>
            <servlet-name>dataBycode</servlet-name>
            <url-pattern>/</url-pattern>
      </servlet-mapping>