我有PersonController
如下:
@Controller
@RequestMapping("person")
public class PersonController {
@RequestMapping(value= "/{personId}", method = RequestMethod.GET, produces={"application/json"})
public @ResponseBody Map<String, Object> getPerson(@PathVariable("personId") Integer personId) {
// code to get person
}
Tomcat启动正常,我在控制台中看到了这一点:
Mapped "{[/person/{personId}],methods=[GET],params=[],headers=[] ,consumes=[],produces=[application/json],custom=[]}" onto public java.util.Map<java.lang.String, java.lang.Object> com.test.web.controller.PersonController.getPerson(java.lang.Integer)
但如果我点击了网址http://localhost:8080/sample/person/1
,我就会
HTTP Status 404 - /sample/person/1
在web.xml中
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/servlet-context.xml</param-value>
</init-param-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/sample/*</url-pattern>
</servlet-mapping>
答案 0 :(得分:2)
我复制/粘贴你的PersonController类,它在这里运行良好。
所以我检查了你的web.xml,你的app servlet正在映射模式“/ sample / *”。
如果我是正确的,我怀疑你的项目在Eclipse中被称为“样本”。在这种情况下,您必须按如下方式访问您的网站:
http://localhost:8080/sample/sample/person/1
您的web.xml中的映射将始终从您的根上下文开始,这就是您收到404错误的原因。
如果要从根域访问控制器(在这种情况下,默认情况下它是您的实际Eclipse项目名称,但也可以配置它),您可以按如下方式使用servlet映射:
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
我建议您使用/ rest / *或其他标记,因为它可以更好地扩展到其他类型的内容。
让我知道它是否有效。