考虑以下假设控制器。
@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方法一样。这样的事情有可能吗?
答案 0 :(得分:0)
在这里回答我自己的问题。 这个问题有一个解决方法。
可以创建一个拦截器,在该拦截器中提取路径变量,并检查那里的资源有效性。如果找不到资源,抛出一些异常,并使用方面(@ControllerAdvice)捕获它。 这是要点:https://gist.github.com/ankushs92/0e97e070401a1bb5fe55