Java SpringMVC测试-在集成测试需要特定类型时注入模拟存储库
我已经使用SpringMVC3编写了一个web应用程序。它提供了一个返回JSON的端点。我确实使用url参数成功运行了它,但现在我需要将其更改为使用路径变量 我换了控制器 发件人: 致: 和我的web xml来映射url 发件人: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
数据代码
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>