【发布时间】:2016-03-13 14:59:58
【问题描述】:
我使用 spring mvc 3 编写了一个 Web 应用程序。它提供了一个返回 JSON 的单一端点。我确实使用 url 参数成功运行了它,但现在我需要将其更改为使用路径变量。
我换了控制器
来自:
@Controller
public class DataController {
@Autowired
private IDataService dateService;
@RequestMapping(
value = "/some/data",
method = RequestMethod.GET,
produces = "application/json"
)
public @ResponseBody Data getDataByCode(@RequestParam String code) {
return versionService.getDataByCode(code);
}
}
到:
@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);
}
}
和我的 web xml 来映射 url...
来自:
<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>
但是我得到了 http 请求的 404:http://localhost/some/data/1234
我知道 1234 存在的地方。
最重要的是,请求甚至没有到达控制器方法,所以它必须是 web xml url 模式配置。
作为测试,我尝试更改 url 模式以完全匹配带有代码的请求,它按预期返回 JSON,所以我知道它的 url 模式。我只是不知道如何解决它。
我试过了:
- /
- /*
- /一些/数据*
- /一些/数据/*
【问题讨论】:
-
你的 Spring 配置是如何加载的?
-
它是通过 xml 配置加载的,你认为这会对应用程序使用路径变量以外的任何东西产生影响吗?如果是这样,那么我将在问题中添加该细节。如果我不使用路径变量,请按预期记住应用程序功能。例如,它可以使用路径参数作为
code值。 -
确实 spring 配置应该不是问题。我添加了一些提示的答案。
标签: java spring-mvc url-pattern path-variables