Spring @PathVariable返回HTTP状态404

时间:2013-05-01 09:55:29

标签: spring

我正在尝试通过其ID检索用户,并检索在页面上分配给他们的模块。我已经在模型中映射了一对多的关系。

用户模型

 @Entity
 @Table(name = "user")
 @Component
  public class User implements Serializable
  @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="user")
  private Set<Module> sModule = new HashSet<Module>();

  @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="manager")
  private Set<Module> cModule = new HashSet<Module>(); 

模块模型

  @Entity
  @Table(name = "modules")
  @Component
  public class Module implements Serializable
  @ManyToOne(fetch=FetchType.LAZY) 
  @JoinColumn(name="user_id", insertable=false, updatable=false)
   private User user;

   @ManyToOne(fetch=FetchType.LAZY) 
  @JoinColumn(name="manager_id", insertable=false, updatable=false)
  private User manager; 

控制器 -

@RequestMapping(value="/home/user_page/{userId}", method = 

    RequestMethod.GET)  
public String showUserModules(@PathVariable("userId") String userId, ModelMap 

    map, HttpServletRequest request) {
    map.addAttribute("cp", request.getContextPath());
    map.addAttribute("user", userService.getWithModules(userId));

    return "/home/user_page";}

当我尝试打开user_page时,它会返回错误,显示:

    The requested resource is not available

因此,当我转到用户页面时,如何获取用户及其所需的模块。

编辑:Stacktrace

   WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP 

  request with URI [/professional/home/user_page] in DispatcherServlet 

  with name 'servlet-context'

1 个答案:

答案 0 :(得分:0)

我认为您的案例中的问题可以通过控制器中两种方法的类似映射来实现。据我所知,其中一种方法的映射类似于“/ home / user / setting_page”和另一种“/ home / user / {userId}”。这就是为什么在添加userId路径变量控制器尝试将“setting_page”解析为userId后,您会收到此错误,因为此类用户不存在。尝试更改其中一个网址,以使其唯一。

修改

确定。正如我从你的更新中看到的那样,问题的原因是Spring试图找到url“home / user_page”的映射,但它不能,因为你没有在控制器中使用这种映射的方法。如果要通过此方法调用显示JSP(或html),则应在配置文件中定义InternalViewResolver并返回页面名称。这里是tutorial,其中介绍了如何使用InternalViewResolver。