我有一个基于 Spring MVC 的 REST 服务。
这是我的代码:
public class SitesController {
@RequestMapping(value="/rest/sites/{id}", method=RequestMethod.GET)
@ResponseBody
public SiteDTO getSite(@PathVariable String id) {
Integer siteId = Integer.parseInt(id);
Site site = cms.getSite(siteId);
SiteDTO siteResult = new SiteDTO(site);
return siteResult;
}
@RequestMapping(value="/rest/sites", method=RequestMethod.GET)
public SitesResult getSites(@RequestParam Integer companyId) {
Collection<Site> sites = cms.getSites(cms.getCompany(companyId));
SitesResult sitesResult = new SitesResult(sites);
return sitesResult;
}
}
(我跳过了一些不适用于该问题的代码)
当我转到 URL/rest/sites/1
时,它返回了我期望的数据,但是当我转到/rest/sites?companyId=1
404 页面时:HTTP Status 404 - /rest/rest/sites
。
日志显示getSites
函数中的代码已运行,但之后日志显示以下内容:org.springframework.web.servlet.view.JstlView Forwarding to resource [rest/sites] in InternalResourceView 'rest/sites'
为什么它被重定向而不是执行?
更新
发现了问题。因为我没有@ResponseBody
上面我的方法,调度员转发了我的请求。更多信息在这里,关键是If the method is annotated with @ResponseBody, the return type is written to the response HTTP body. The return value will be converted to the declared method argument type using HttpMessageConverters.