Jer*_*emy 5 java path-variables spring-mvc url-pattern
我使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
至:
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
和我的web xml来映射网址...
从:
<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>
Run Code Online (Sandbox Code Playgroud)
至:
<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>
Run Code Online (Sandbox Code Playgroud)
但我得到了一个404的http请求:http://localhost/some/data/1234
我知道1234存在.
最重要的是,请求永远不会进入控制器方法,因此它必须是web xml url模式配置.
作为测试,我尝试更改url模式以使请求与代码完全匹配,并按预期返回JSON,因此我知道它的url模式.我只是不知道如何解决它.
我试过了:
您的 url 模式应该是:
<servlet-mapping>
<servlet-name>dataBycode</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
另一方面,您可以尝试访问http://localhost/some/data/myTest并将 System.out.println 放入您的 getDataByCode 方法中以查看该方法是否被调用。
如果它有效,我认为问题来自 Spring MVC,它将“1234”解释为整数而不是字符串。
| 归档时间: |
|
| 查看次数: |
240 次 |
| 最近记录: |