控制器级路径变量异常

时间:2015-10-05 09:58:14

标签: spring-mvc

考虑以下假设控制器。

@Controller
@RequestMapping(value="index/{user_id}")
public class HomeController {

    @RequestMapping(value="post/{post_id}")
    public String getPostById(@PathVariable final int post_id){
        if(post_id==0){
             throw new ResourceNotFoundException();
         }
       return "home";
    }
}

ResourceNotFoundException映射到HTTP 404错误:

@ResponseStatus(value=HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException{
    public ResourceNotFoundException(){
        super();
    }
}

如果有人试图访问一个url说index/1/post/0,那么处理程序方法会抛出404错误,因此我可以显示一个错误页面,其中包含“未找到资源”消息。 但是想象一下用户尝试访问index/12/post/1形式的URL的情况,并且我查询db的用户ID为12的用户,该用户不存在。在这种情况下,我希望Spring生成404错误,就像我使用handler方法一样。这样的事情有可能吗?

1 个答案:

答案 0 :(得分:0)

在这里回答我自己的问题。 这个问题有一个解决方法。

可以创建一个拦截器,在该拦截器中提取路径变量,并检查那里的资源有效性。如果找不到资源,抛出一些异常,并使用方面(@ControllerAdvice)捕获它。 这是要点:https://gist.github.com/ankushs92/0e97e070401a1bb5fe55