如何使用Spring注释用户存在检查?

时间:2012-03-06 10:23:34

标签: spring spring-mvc controller annotations spring-annotations

我想通过JSON API管理用户项目,并且我想使用相对路径控制器。像这样:

@RequestMapping(value="/users/{userId}/projects",
    headers="Accept=application/json")
@Controller
public class UserProjectsController {

    @Autowired
    private UserRepository userRepository;

    @RequestMapping(method=RequestMethod.GET)
    public @ResponseBody Object getAllUserProjects(@PathVariable String userId) {
        User user = userRepository.findById(userId);
        if (user == null) {
            return new ResponseEntity<String>(HttpStatus.NOT_FOUND);
        }
        return user.getGivenProjects();
    }
}

我会添加许多方法,每次我都要检查用户是否存在。而不是添加那段代码:

User user = userRepository.findById(userId);
if (user == null) {
    return new ResponseEntity<String>(HttpStatus.NOT_FOUND);
}

...在每个方法开始时,我想创建一个自定义注释,如果用户不存在,将返回404。

我发现this tutorial要做到这一点。这真的和描述的一样复杂吗?你知道其他任何解决方案吗? (我想避免编写2个类和超过50行代码来注释4行。)

谢谢。

1 个答案:

答案 0 :(得分:3)

我首先假设这项检查与安全无关,是吗?

我认为WebArgumentResolver不符合您的需求。返回404状态可能很复杂。

也许自定义interceptor可以是更好的解决方案。每次向控制器发出请求时都会调用它。在那里,您可以检查处理程序对象,以查看它是否具有一个名为 userId 的参数,例如使用 @PathVariable 进行注释。然后,您可以执行检查并使用响应对象在必要时返回404。

另一种选择是创建自定义@Aspect,但我们可能会使问题过于复杂。首先,尝试以前的解决方案。