@PathVariable在春天不起作用

时间:2014-05-11 19:03:25

标签: java spring rest

我有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>

1 个答案:

答案 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 / *或其他标记,因为它可以更好地扩展到其他类型的内容。

让我知道它是否有效。